【C++】构造拷贝构造的 N 中调用情况

来源:互联网 发布:58上面网络销售可靠吗 编辑:程序博客网 时间:2024/05/21 11:20

1. 总结 C++ 对传参和传返回值时构造的优化处理。 

1)C++ 形式参数类型和返回值类型如果是引用,那么在传递时,会把实参或者返回值的引用自动赋值给形式参数(返回值)。

2)C++ 返回值赋值和返回值的使用往往会进行编译器的优化,例如:下面的调用中,只会调用两次构造函数(一次是默认构造函数,另外一次是自动拷贝构造函数)

Student s = getStudent();Student getStudent(){      return Student s;}

3)

Student s;Student s2 = s;Student s3(s);


编译器会自动将上述第二句优化成第三句。


4)C++ 函数参数(或者返回值)赋值时,如果其类型是类并且对应的构造函数存在,那么会自动调用匹配的构造函数构造目标类型,例如:

Student s = getStudent();Student getStudent(){Student s;        return &s;}Student(const student* s){}


      虽然返回值类型是 Student 类对象,但是返回值是指针并且存在对应的构造函数(student 指针构造函数),所以程序能够正确编译,但是如果没有显式重载对应的特殊构造函数,程序编译不能通过。


2. 完成下面的题目。 

Test1 中调用了___次 AA  的拷贝构造函数,___次 AA  的赋值运算符函数的重载。 
Test2 中调用了___次 AA  的拷贝构造函数,___次 AA  的赋值运算符函数的重载。 
Test3 中调用了___次 AA  的拷贝构造函数,___次 AA  的赋值运算符函数的重载。

class AA{};AA f(AA a){    return a;}void Test1(){    AA a1;    a1 = f(a1);}void Test2(){    AA a1;    AA a2 = f(a1);}void Test3(){    AA a1;    AA a2 = f(f(a1));}

Test1 中调用了_2_次 AA  的拷贝构造函数,_1_次 AA  的赋值运算符函数的重载。 



Test2 中调用了_2_次 AA  的拷贝构造函数,_0_次 AA  的赋值运算符函数的重载。 


Test3 中调用了_3_次 AA  的拷贝构造函数,_0_次 AA  的赋值运算符函数的重载。 


 
原创粉丝点击