簡體   English   中英

我如何告訴gcc警告我字符串被賦予整數值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM