为什么编译:string = int
Why does this compile: string = int
假设如下代码:
#include <iostream>
#include <string>
int func() { return 2; }
int main()
{
std::string str("str");
str = func();
std::cout << "Acquired value: '" << str << "'" << std::endl;
return 0;
}
为什么 str = func();
行编译时没有类型不匹配的警告?
我正在使用设置了 -std=c++11 标志的编译器 gcc v.4.7.1。
输出:
Acquired value: ''
std::string
class 包含一个接受 char
值的重载 operator=
。由于 char
是整数类型,因此 int
可以隐式转换为 char
.
分配给 str
的值不是空字符串;它是一个长度为 1 的字符串,其单个字符的值为 2 (Ctrl-B)。
尝试将程序的输出提供给 cat -v
或 hexdump
。
$ ./c | cat -v
Acquired value: '^B'
假设如下代码:
#include <iostream>
#include <string>
int func() { return 2; }
int main()
{
std::string str("str");
str = func();
std::cout << "Acquired value: '" << str << "'" << std::endl;
return 0;
}
为什么 str = func();
行编译时没有类型不匹配的警告?
我正在使用设置了 -std=c++11 标志的编译器 gcc v.4.7.1。
输出:
Acquired value: ''
std::string
class 包含一个接受 char
值的重载 operator=
。由于 char
是整数类型,因此 int
可以隐式转换为 char
.
分配给 str
的值不是空字符串;它是一个长度为 1 的字符串,其单个字符的值为 2 (Ctrl-B)。
尝试将程序的输出提供给 cat -v
或 hexdump
。
$ ./c | cat -v
Acquired value: '^B'