有没有任何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