这是我的测试用例(请注意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中似乎不起作用。

10-01 15:04