这个编译: - )
string name;
name = 1;
这不是:
string name = 1;
有什么想法吗?
我知道这是错的。 。 。这不是重点。第一个是笑脸。
答案 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而不是一些随机类。