【发布时间】:2012-03-11 06:56:46
【问题描述】:
赋值运算符的重载会传播到初始化列表吗?
例如,假设一个类:
class MyClass {
private:
std::string m_myString; //std::string overloads operator =
public:
MyClass(std::string myString);
}
还有一个构造函数:
MyClass::MyClass(std::string myString)
: m_myString(myString)
{
}
初始化器列表会计算出std::string 上的赋值运算符重载吗?如果没有,是否有解决方法?
特别是对于 GCC。
【问题讨论】:
-
赋值运算符与什么有什么关系?一个对象只能通过构造函数来初始化;如果调用了赋值运算符,那只是因为您已经有一个对象实例。
-
@ildjarn 老实说,我是初始化列表的新手。我的理由是,因为它将替换构造函数主体中的
m_myString = myString;(赋值),所以在初始化列表中有一个赋值of sorts。 -
我假设
myString的类型是std::string?你忘了给它一个类型。 -
你错过了 C++ 的一个基本部分,
assignment和intialization之间的区别。 Initializer 列表进行初始化而不是赋值。 -
在这种情况下,是的,它是一个复制构造函数;然而,在 real 代码中,您可能希望调用移动构造函数,而不是复制构造函数(假设您使用的是 C++11)。
标签: c++ gcc operator-overloading assignment-operator initializer-list