下面是一个简单的例子:一个变量声明创建了多个实例
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";
}
在代码中,虽然A
声明只有一次,也有越来越创建的A
两个实例。构造函数被调用两次。我可以在VS 2013以及gnu C++中重现这一点。
想知道这是行为错误还是规范的一部分。
您可以通过定义一个'A ::运算符=(为const char *)避免临时' (或者更好的'A :: operator =(std :: string const&)')。 – Walter 2015-03-13 16:56:22
'想知道这个行为是否是一个错误'您使用了全世界数以千计的人和公司使用的两种编译器,并且从这些不重要的代码中获得了相同的结果。鉴于此,这是一个错误有什么机会? – PaulMcKenzie 2015-03-13 17:05:12
@MatthewMoss我在评论最后的问题真的是讽刺。该程序是一个玩具程序,g ++和Visual Studio被成千上万的人使用。如果这是一个错误,它会在整个网络上报告(再加上两个独立的编译器厂商会用这样一个非常简单的程序产生相同的错误)。 – PaulMcKenzie 2015-03-13 17:38:51