我可以为字符串分配双倍?

时间:2017-02-10 21:43:54

标签: c++

根据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。

2 个答案:

答案 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