Jay*_*ark 0 c++ constructor variable-assignment assignment-operator
class phone {
public:
phone(int x) { num = x; }
int number(void) { return num; }
void number(int x) { num = x; }
private:
int num;
};
int main(void)
{
phone p1(10);
p1 = 20; // here!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
嗨,大家好
我刚刚宣布了一个类似上面的简单类.
之后我将int值赋给了该类的对象,然后就可以了!
(我打印了它的价值.它存放得当)
如果没有带有int参数的构造,则发生编译错误.
所以,我认为它与构造函数有关.是对的吗?
请给我一个很好的解释.
谢谢.
这是合法的,因为C++解释了可以使用类型的单个参数调用的任何构造函数,T作为从Ts 隐式转换为自定义对象类型的方法.在你的情况下,代码
p1 = 20;
Run Code Online (Sandbox Code Playgroud)
被解释为
p1.operator= (20);
Run Code Online (Sandbox Code Playgroud)
反过来,这被解释为
p1.operator= (phone(20));
Run Code Online (Sandbox Code Playgroud)
这种行为非常奇怪,而且几乎肯定不是你想要的.要禁用它,您可以标记构造函数explicit以禁用隐式转换:
class phone {
public:
explicit phone(int x) { num = x; }
int number(void) { return num; }
void number(int x) { num = x; }
private:
int num;
};
Run Code Online (Sandbox Code Playgroud)
现在,在进行隐式转换时不会考虑构造函数,上面的代码会导致错误.