【发布时间】:2011-01-25 08:22:14
【问题描述】:
是否有任何 g++ 选项可以使用 NULL const char* 检测 std::string 的不正确初始化?
我正在将一些 int 字段转换为 std::string 字段,即:
struct Foo
{
int id;
Foo() : id(0) {}
};
...变成:
struct Foo
{
std::string id;
Foo() : id(0) {} //oooops!
};
我完全忽略了使用 0 和 g++ 进行的糟糕的“id”初始化,根本没有给我任何警告。在运行时检测到此错误(std::string 构造函数引发异常),但我真的很想在编译时检测到这些东西。有什么办法吗?
【问题讨论】:
-
不幸的是,0 是一个不会触发从 int 到指针的无效转换错误的值。因为当然 0 是一个空指针常量,所以可以转换为任何指针类型。除了像访问者所说的那样,我不知道您能做的任何事情,首先不要编写该初始化程序。
-
正确的解决方案是添加一个私有构造函数
std::string::string(int);。这将是一个更好的匹配,因此会导致编译时错误。 -
不确定您是否是这个意思,但这可能确实有效,作为一次性测试来捕获从
int到string的这一轮更改导致的任何错误。修改 g++ 标准头文件中的std::basic_string,检查新代码是否可以编译,然后在任何人注意到之前快速改回来。 -
哦,不改变标准头不是一个选项 :) 但我可能应该让 g++ 开发人员在未来添加私有 int 构造函数?