本文共 927 字,大约阅读时间需要 3 分钟。
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为空。
转载地址:http://tcxgj.baihongyu.com/