这是我的测试用例(注意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);
}
Run Code Online (Sandbox Code Playgroud)
我想捕获std :: string的实例,而不是另一个字符串或char*.我曾假设编译器会拒绝不兼容的类型,但它允许它.
我怎么能告诉gcc(版本4.4.3)拒绝这种愚蠢?...还是有其他方法强制拒绝将这些不兼容的类型分配给std :: string?
原因是存在以下过载:
string &operator=(char)
Run Code Online (Sandbox Code Playgroud)
编译器可以通过单个隐式转换来满足您的赋值,因此它可以编译.
我认为-WconversionGCC旗帜应该处理这个问题,但它似乎不起作用,至少在GCC 4.1.2中是这样.