5
在最近的一個項目中,我跑進其中我意外地分配一個浮子爲字符串參考誤差(代替浮點數轉換成字符串,則分配給它)。分配一個浮動的字符串引用的作品,爲什麼?
的代碼看起來是這樣的(在兩者的Xcode /蘋果LLVM 7.1和GCC 4.9.2測試):
#include <iostream>
using namespace std;
static void get_text(string &s) {
s = 1.0f; // Legal (not even a warning!)
}
// This version gives a compiler error (as I'd expect)
// static void get_text(string &s) {
// string out = 1.0f;
// s = out;
// }
int main() {
string s;
get_text(s);
cout << s << endl; // Prints garbage
return 0;
}
打印字符串明顯地導致垃圾,但我不明白爲什麼這個沒沒有多少警告。 (我最好的猜測是,編譯器做了一些隱式的重新解釋演員從浮動,到int,到內存地址...?)
是否有一個警告,我可以啓用(在Xcode中,理想情況下)會在未來阻止這種事情?
引人入勝。爲了後代的緣故,我會補充一點,雖然'std :: string'中有一個'operator =(char c)',但沒有一個對應的構造函數需要一個字符 - 這解釋了爲什麼我的問題中第二個版本的get_text()不會編譯。如果我修改第二個版本來閱讀:'串出; out =(char)1.0f;',它編譯。 – s3cur3