inline内联
内联说明(inline specification)对于编译器来说只是一个建议,编译器可以选择忽略这个建议。也就是说,是否以嵌入式方式存在,是由编译器决定的,并不是一定。
c++不是类型安全语言
c++可以把0当成false,就算函数返回的是bool类型,你返回0,照样会转成false,所以并不是很安全
c++实例化顺序根据定义顺序
struct A {
A() { std::cout << "A"; }
};
struct B {
B() { std::cout << "B"; }
};
class C {
public:
C() : a(), b() { std::cout << "C"; }
private:
B b;
A a;
};
int main()
{
C();
}
这段代码先定义了b,再是A,所以是B的构造先执行。打印的顺序是BAC
如果是B类继承A类,实例化B类,先调用A构造函数,然后在调用B的构造,析构是先调用B的,在调用A的。只要理解其中的原理,还是很好理解的 。
C++11已经支持使用or代替||符号。
register修饰符
暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。
1.register修饰通常是一个变量,但是必须小于int大小
2.因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址。
3.只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。
4.局部静态变量不能定义为寄存器变量。不能写成:register static int a, b, c;
反正寄存器数量有限,所以尽量少使用。实际上现在许多编译器会忽略register的存在。
c++11中变量可以在类中初始化。
c++访问权限总结
-
c++是类中默认访问类型是private,struct默认是public
-
private,public,protected方法的访问范围.(public继承下)
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数 -
类的继承后方法属性变化:
使用private继承,父类的所有方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;
类模板声明
类模板的格式如下:
template``<``class``形参名,``class``形参名,…>``class``类名{ ... };
函数模板的格式如下:
Template <``class` `形参名,``class` `形参名,......> 返回类型函数名(参数列表){函数体}
其中,class
可以用typename
关键字代替。