有沒有任何g ++選項可以檢測不正確的初始化std :: string與NULL const char *?避免不正確的std ::字符串初始化與空const char *使用g ++
我是在轉彎一些int字段成的std :: string的人的過程,即:
struct Foo
{
int id;
Foo() : id(0) {}
};
...變成了:
struct Foo
{
std::string id;
Foo() : id(0) {} //oooops!
};
我完全忽略壞的 '身份證'用0和g ++初始化完全沒有給我警告。這個錯誤是在運行時檢測到的(std :: string構造函數拋出一個異常),但我真的很想在編譯時檢測這些東西。有什麼辦法嗎?
不幸的是,0是一個不會觸發從int到指針的無效轉換錯誤的值。因爲0是一個空指針常量,所以可以轉換爲任何指針類型。除了像訪問者說的那樣,我不知道你能做的任何事情,而不是首先寫出初始化器。 – 2010-03-09 11:23:32
正確的解決辦法是添加一個私有構造函數'std :: string :: string(int);'。這會更好地匹配,從而導致編譯時錯誤。 – MSalters 2010-03-09 11:47:12
不確定你是否以這種方式表示,但實際上它可以起到一次性測試的作用,可以捕獲從「int」到「string」這一輪更改所導致的任何錯誤。修改g ++標準頭文件中的'std :: basic_string',檢查新代碼是否編譯,然後在任何人發佈之前快速更改它。 – 2010-03-09 12:01:15