根据this页面,有五种方法可以为字符串分配内容:
string (1) string& operator= (const string& str);
c-string (2) string& operator= (const char* s);
character (3) string& operator= (char c);
initializer list (4) string& operator= (initializer_list<char> il);
move (5) string& operator= (string&& str) noexcept;
那为什么我可以编译下面的文字?编译器使用了哪些选项?
#include <iostream>
#include <string>
int main()
{
std::string s;
double d = 1.0;
s = d;
std::cout << s << std::endl;
}
这不仅仅是一个毫无意义的问题 - 我花了很长时间试图在我的代码中找到这个s = d
作业。当然应该是s = std::to_string(d)
。
编译:GCC 4.8.4。
答案 0 :(得分:7)
您的代码与此代码相同:
#include <iostream>
#include <string>
int main()
{
std::string s;
double d = 1.0;
char j = d;
s = j;
std::cout << s << std::endl;
}
因此,您将输出\1
,然后输出一行。
如果你正在使用G ++,请指定-Wconversion
来捕捉这样的事情。
f.cpp:在函数'int main()'中:
f.cpp:8:7:警告:从'double'转换为'char'可能会改变其值[-Wfloat-conversion]
s = d;
答案 1 :(得分:4)
执行此转换:double -> char
并因此使用以下重载:
character (3) string& operator= (char c);
我测试了这个用od
扫描你的输出:
> ./a.out | od -c
0000000 001 \n