这个编译:-)VS2008 C++编译器错误?
string name;
name = 1;
这并不:
string name = 1;
有什么想法?
我知道这是错误的。 。 。那不是重点。第一个给笑脸。
这个编译:-)VS2008 C++编译器错误?
string name;
name = 1;
这并不:
string name = 1;
有什么想法?
我知道这是错误的。 。 。那不是重点。第一个给笑脸。
第一次编译是因为赋值运算符被称为“string & operator =(char c)”的一个签名,编译器可以将1转换为char。
第二个不会编译,因为它调用没有兼容签名的复制构造函数。
第二个例子是真正的初始化而非赋值,即它调用构造函数而不是operator=
。显然,类string
没有一个将整数作为参数的构造函数,但它的赋值操作符对它是可以的。而你得到笑脸的原因是它是ASCII值为1的字符。
顺便说一下,这不是特定于Visual Studio。任何C++编译器都应该以相同的方式运行。
与问题无关,但您为什么不(和其他人)发布可编译代码。会:
#include <string>
using namespace std;
int main() {
string name;
name = 1;
string name2 = 1;
}
已经太多要问?鉴于此,我们可以看到“string”实际上是指std :: string而不是一些随机类。
我想如果包含没有显示,那么它被认为是标准。如果是随机课程,那么你必须展示它。此外,他很快得到了正确的答案,从而强化了行为(对所有看到它的人)。我认为这就是它成为常态的原因。 –
我同意这里的很多代码示例都不够完整,但对于这样简单的事情来说更是不必要的。此外,这不应该是一个答案,而是一个评论。 – krdluzni
对我来说,并不是猜测'string'是指什么,但是我必须自己编写一个可编辑的例子才能玩弄它。我非常感谢他们递交了一个现成的例子,如果我有这个问题,我更有可能更加关注这个问题。 – sbi