这是一个简单的例子:
class A {
public:
A() {
printf("%p C1\n", this);
}
A(const char* p) {
printf("%p C2\n", this);
}
};
int main(int argc, char *argv[]) {
A a;
a = "abc";
}
Run Code Online (Sandbox Code Playgroud)
在代码中,虽然A只声明了一次,但有两个A创建实例.构造函数被调用两次.我可以在VS 2013和gnu C++中重现这一点.
想知道这种行为是错误还是规范的一部分.
它是规范的一部分.当你这样做:
a = "abc";
Run Code Online (Sandbox Code Playgroud)
使用构造函数在RHS上的表达式A创建临时对象.这用于指定值."abc"A(const char* p)a
如果你这样做了
A a = "abc";
Run Code Online (Sandbox Code Playgroud)
你只会看到一个构造函数调用.