Effective C++ item 5
程序员文章站
2024-03-23 14:24:28
...
条款5 :了解C++默默编写调用了那些函数
calss A{
public:
A() = default; //empty 类会自动创建,显示声明构造时,编译器不会自动添加
A(std::string a,std::string b){}
private:
std::string aa;
std::string bb;
};
int main(){
A a("abc","123"); // ok
std::string _a = "123";
std::string _b = "abc";
A b(_a,_b); //ok
A c(); //ok
}
当类中成员变量为non-reference或者non-const时,构造函数参数接受左值和右值,函数体内可通过赋值传给成员变量。同理copy-construct和assignment。
class A{
public:
A() = default;;
A(std::string a,std::string b):aa(a),bb(b){}
private;
std::string & aa;
const std::string bb;
};
int main(){
A a("123","12345"); //ok,but a.aa no initialization success
-----------------------------------------------------------
std::string a = "123";
std::string b = "345";
A b(a,b); // ok
a = "qweer";
b;//b.aa no value
}
当类中成员变量为引用类型或const时,必须使用初始化列表进行初始化,但是构造中的参数,引用时必须传入左值才能正确赋值否则为空,而const变量接受左值和右值。注意的时,当使用左值传入参数时,a的值修改之后,b中aa会为空。
将构造函数改成:
A(std::string& a,std::string b):aa(a),bb(b){}
这样上述问题将不不会存在,外部变量a的改变不会使得b.aa为空。
上一篇: jdk8新特性
下一篇: Java基础之引用数据类型
推荐阅读
-
Effective C++ item01 尽量以const enum inline替换#define
-
Effective C++ item 5
-
【Effective C++】彻底了解 inline 函数
-
Effective Modern C++ Item 1
-
Effective Modern C++: Item 12 -> 声明覆盖函数override
-
Effective C++(inline函数的方方面面)
-
C++必备基础知识(x+1) -《Effective C++必懂条款2》
-
C++复习(5)内敛函数 inline
-
【C++深度解析】5、函数参数的扩展
-
《C++第九周实验报告5-1》---设计一元一次方程类,求形如ax+b=0的方程的解