版权声明:所有的博客都是作为个人笔记的。。。。。。 https://blog.csdn.net/qq_35976351/article/details/82969106
__func__
返回函数名:
const char* hello() { return __func__; }
返回hello
_Pragma(字符串字面常量)
用于编译预处理:
_Pragma("once");
表明仅仅对头文件编译一次。
静态断言:static_assert()
:
和动态断言类似,都位于cassert
头文件中,区别在于
assert
动态断言处理的表达式是在程序运行期间的,只有返回式为true
时能运行,但是影响程序的性能static_assert
静态断言在编译期间运行,不影响程序性能,更多的是用于程序编译时期的检查
使用方式为static_assert(表达式,编译输出的信息)
,
static_assert(sizeof(int) == 8, "This 64-bit machine should follow this!");
如果断言失败,输出错误的编译信息。
noexcept
表示程序不会抛出异常,如果有异常发生,那么会调用std::terminiate()
终止程序。
C++11可以使用初始化列表{}
对类的成员数据进行初始化。
sizeof
返回一条表达式或者一个类型名字占用的字节数,返回size_t
类型的常量表达式。它不会求解实际运算对象的数值。有一规则:
char
类型或者返回char
类型的表达式,都返回1- 对引用类型返回引用对象空间的大小
- 对一个只有构造函数和析构函数的类来说,返回结果是1;如果有成员变量,则返回成员变量占用空间的总和
- 解引用指针执行返回指针指向对象占用空间的大小,指针不需要有效
- 对数组执行返回数组所有元素占用空间的总和
string
和vector
只会返回固定部分的大小,与实际存储了多少数据无关。- C++11对非静态成员使用
sizeof
是合法的
尽量对重写的函数声明override
,对不想被继承的类声明为final
extern基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。
C++11中,模板也可以进行extern
声明:
extern template void fun<int>(int); // 外部模板声明
编译和链接时只有初始声明的生成代码。
C++中,如果子类要调用父类的函数,那么需要使用using
关键字。
#include <bits/stdc++.h>
using namespace std;
struct Base {
void fun(double i) {
cout << "Base:" << i << endl;
}
};
struct Derived: Base {
using Base::fun;
void fun(int i) {
Base::fun(i); // 可以直接调用
cout << "Derived:" << i << endl;
}
};
int main() {
Derived d;
d.fun(1);
d.fun(1.1);
return 0;
}