VS2008 C ++编译器错误?

时间:2009-08-31 20:06:37

标签: c++ constructor initialization variable-assignment

这个编译: - )

string name;
name = 1;

这不是:

string name = 1;

有什么想法吗?

我知道这是错的。 。 。这不是重点。第一个是笑脸。

3 个答案:

答案 0 :(得分:14)

第一个编译,因为赋值赋值运算符被称为“string& operator =(char c)”的一个签名,编译器可以将1转换为char。

第二个将无法编译,因为它调用了没有兼容签名的复制构造函数。

答案 1 :(得分:4)

第二个例子是初始化而不是赋值,i。即它调用构造函数而不是operator=。显然,类string没有一个以整数作为参数的构造函数,但是它的赋值运算符是可以的。你得到笑脸的原因是它是ASCII值为1的字符。

顺便说一句,这不是Visual Studio特有的。任何C ++编译器都应该以相同的方式运行。

答案 2 :(得分:1)

与此问题无关,但为什么不(和许多其他人)发布可编辑的代码。会:

#include <string>
using namespace std;

int main() {
    string name;
    name = 1;
    string name2 = 1;
}

要求太多了?鉴于此,我们可以看到“string”实际上是指std :: string而不是一些随机类。