2

这编译:-)

string name;
name = 1;

这不会:

string name = 1;

有什么想法吗?

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

4

3 回答 3

14

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

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

于 2009-08-31T20:15:06.997 回答
4

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

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

于 2009-08-31T20:15:18.323 回答
1

与问题无关,但您(和许多其他人)为什么不发布可编译代码。将 :

#include <string>
using namespace std;

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

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

于 2009-08-31T20:21:52.273 回答