2021.07.17牛客学习

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关键字代替。

原文地址:https://www.cnblogs.com/sunnylinry/p/15024940.html