本文主要是介绍0613# 3 八股,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
拷贝初始化和直接初始化
string str1("I am a string");//语句1 直接初始化
string str2(str1);//语句2 直接初始化,str1是已经存在的对象,直接调用拷贝构造函数对str2进行初始化
string str3 = "I am a string";//语句3 拷贝初始化,先为字符串”I am a string“创建临时对象,再把临时对象作为参数,使用拷贝构造函数构造str3
string str4 = str1;//语句4 拷贝初始化,这里相当于隐式调用拷贝构造函数,而不是调用赋值运算符函数
- 如果
std::string
类的拷贝构造函数在类中被声明为private
,那么语句3和语句4将无法编译通过。这是因为拷贝初始化需要调用拷贝构造函数,而在private
访问控制符下,非友元类和成员函数无法访问它。 - 使用
explicit
关键字修饰构造函数时,它可以防止隐式类型转换。这意味着带有explicit
关键字的构造函数不能用于拷贝初始化,只能用于直接初始化。 - 对于语句3:由于
explicit
构造函数不能用于隐式转换,因此编译器无法隐式地将"I am a string"
转换为std::string
,然后调用explicit MyClass(const std::string& s)
构造函数
初始化发生在对象创建时,而赋值发生在对象创建之后
extern "C"</
这篇关于0613# 3 八股的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!