让某个类的 '=' 运算符在声明时运行构造函数

let '=' operator of a certain class run the constructor upon declaration

本文关键字:声明 运行 构造函数 运算符      更新时间:2023-10-16

我想知道是否有办法让 = 运算符在声明时触发类的构造函数(或任何方法(

比方说

class foo
{
public:
string variable="";
foo(string var)
{
this->variable=var;
}
foo(){}
void operator=(string var)
{
this->variable=var;
}
} 
int main()
{
foo obj="new foo object";
}

当我运行它时,它说"错误:请求从'const char[15]'转换为非标量类型'foo'">

但是当我这样做时

foo obj;
obj="new foo object";

它有效

我该怎么做才能使第一种方法起作用?

我该怎么做才能使第一种方法起作用?

提供一个采用类型char const *的参数的构造函数。

并使用构造函数的初始化列表来初始化成员,而不是构造函数主体中的赋值。

顺便说一句:

foo obj = "new foo object";

不调用operator=().

为什么不直接使用构造函数(无论如何都应该声明为显式的,所以你想要的构造实际上是不好的做法 IIRC(? 只需做:

foo obj("bar");

此外,变量不应该有默认的空值,默认构造函数将正确创建它。 还应将variable放在初始值设定项列表中。