![](/img/trans.png)
[英]How can I tell gcc to warn (or fail) on switch/case statements without a break?
[英]How can I tell gcc to warn me of strings being assigned an integer value?
這是我的測試用例(注意WTF評論):
TEST(string_assignment)
{
std::string str;
std::string cheese="Cheese";
str=cheese;
CHECK_EQUAL(cheese, str);
long lval=0;
str=lval; //WTF - why does the compiler allow this ?
str="";
str.append(cheese);
CHECK_EQUAL(cheese, str);
}
我想捕獲std :: string的實例,而不是另一個字符串或char *。 我曾假設編譯器會拒絕不兼容的類型,但它允許它。
我怎么能告訴gcc(版本4.4.3)拒絕這種愚蠢? ...還是有其他方法強制拒絕將這些不兼容的類型分配給std :: string?
原因是存在以下過載:
string &operator=(char)
編譯器可以通過單個隱式轉換來滿足您的賦值,因此它可以編譯。
我認為-Wconversion
GCC標志應該處理這個,但它似乎不起作用,至少在GCC 4.1.2中。
因為它不能。 最終,由於C兼容性:與所有其他內置數值類型一樣, long
隱式轉換為char
。 所以為了禁止這個,你還必須禁止someString = someChar
。 哪個不會打擾我太多,但無論出於何種原因,委員會認為是必要的。
它由於以下重載而編譯:
string& operator=(char)
使用g++ -Wconversion
打印警告消息。
並且g++ -Wconversion -Werror
將警告視為錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.