沒有編譯器抱怨這段代碼爲什麼:爲std :: string賦值double - 沒有編譯錯誤?
#include <string>
#include <iostream>
int main()
{
std::string a;
a = 2.3;
std::cout << "A:" << a << std::endl;
return 0;
}
GCC,MSVC似乎並不關心這個根本, 即使它顯然是錯誤的,並不實際工作呢!
輸出是:
A:
哎喲!導致我的程序中未檢測到錯誤。
打開警告? Clang發出以下內容:'警告:從'double'到'char'的隱式轉換將從2更改值。3到2 [-Wliteral-conversion]' – Rapptz 2014-10-06 07:56:49
這是做你告訴它。將double值更改爲65.3,它將輸出'A:A'(65是字母'A'的ASCII值)。 – Blastfurnace 2014-10-06 07:59:28
在我的GCC(4.82)中,即使'-Wall -Wextra'也不會在需要'-Wconversion'的時候發出警告。 – Galik 2014-10-06 08:13:14