构造函数的快捷方式

Asl*_*986 0 c++

其实我不知道如何定义这个习语.

在某些代码中我有红色的东西:

ClassWithAMessage c = "This is the message";
Run Code Online (Sandbox Code Playgroud)

我希望阅读的地方:

ClassWithAMessage c("This is the message");
Run Code Online (Sandbox Code Playgroud)

我不知道如何重现这种行为,有人可以提供一些信息或玩具示例吗?

Luc*_*ore 5

ClassWithAMessage c = "This is the message";
Run Code Online (Sandbox Code Playgroud)

复制初始化.必须有一个拷贝构造函数才能使用它.首先,ClassWithAMessage使用转换构造函数构造临时"This is the message".然后将临时用于复制构造函数来构造c.这是复制省略(临时可能不存在).

ClassWithAMessage c("This is the message");
Run Code Online (Sandbox Code Playgroud)

直接初始化.转换构造函数直接使用.

不是真正的习语,只是构建对象的不同方式.

  • 在C++ 11中,如果移动构造函数可用,则将使用它来代替第一个语句的复制构造函数. (2认同)