C++88个注意点子之21~30

来源:互联网 发布:智能网络推广系统 编辑:程序博客网 时间:2024/04/28 00:04

21. 函数返回非引用类型和引用类型时:

返回非引用类型: 调用复制构造函数

返回引用类型: 不调用复制构造函数

函数返回在表达式中,编译器会自动创建一个无命名的临时变量,将返回值赋给它。


22. 默认实参如果有一个形参为默认实参,那么后面的形参都必须又默认实参。

函数调用的实参按位置解析,默认实参只能用来替换函数调用缺少的尾部实参。


23.千万不要返回局部对象的引用。

千万不要返回指向局部对象的指针。


24. 默认实参初始化式可以是任何适当类型的表达式,如:int screenInit(int height = screenHeight());


25. 既可以在声明中指定默认实参,也可以在定义中。但在一个文件中,只能指定默认实参一次。


26. 静态局部对象在程序结束前不会消失。如:

void f()

{

      static int x = 5;

}

但是变量的作业域没有变。


27. 内联函数主要用于解决小型函数的调用耗时问题。

内联函数可以放在头文件中定义。


28. 编译器隐式地将类定义中的成员函数作为内联函数。

如:

class a {

public:

        void print()

        {

                std::cout << "Hello, world!" << std::endl;

        }

  int add(int t1, int t2);

}

类a的定义中print函数将自动作为内联函数展开,add函数不是内联函数,它的具体定义在类定义体中。


29. 类的每个成员函数都隐含了一个额外的this形参。如:上面的add中(a* const this, int t1, int t2)。

在成员函数后面的const作用为定义了这样的this指针:

const a* const this。即指向a类型的const指针,该指针值也是不可变的。所以this指针不能改变对象内变量值。

注: const对象的指针只能调用其const成员函数,如调用非const成员函数则会报错。


30. 构造函数可以重载

无形参的构造函数为默认构造函数。

在类中无显式定义任何构造函数,则编译器将自动合成默认构造函数。

若调用合成默认构造函数时,在类的初始化时,若类对象为全局变量,则内建类型初始化为0,否则为局部变量时内建类型未初始化。






0 0
原创粉丝点击