使用g ++避免使用NULL const char*进行不正确的std :: string初始化

pac*_*nga 10 c++ g++ stdstring

有没有g ++选项可以用NULL const char*检测std :: string的不正确初始化?

我正在将一些int字段转换为std :: string,即:

struct Foo
{
   int id;
   Foo() : id(0) {} 
};
Run Code Online (Sandbox Code Playgroud)

...转换成:

struct Foo
{
   std::string id;
   Foo() : id(0) {} //oooops!
};
Run Code Online (Sandbox Code Playgroud)

我完全忽略了使用0和g ++初始化错误的'id'初始化时没有给我任何警告.在运行时检测到此错误(std :: string构造函数抛出异常),但我真的想在编译时检测到这些东西.有什么办法吗?

Joh*_*ing 7

我想不出在编译时检测这个的方法,所以我写了一个字符串构建器函数来正确处理空指针:

//  FUNCTION :      safe_string(char const* pszS)
//  PARAMATERS :    pszS        source string to build a string from (may be NULL or 0-length)
//  DESCRIPTION :   Safely builds a string object from a char*, even a NULL pointer
//  RETURNS :       string

template<class C>
inline basic_string<C> safe_string(const C* input)
{
    if( !input )
        return basic_string<C>();
    return basic_string<C>(input);
}
Run Code Online (Sandbox Code Playgroud)

每当我创建一个字符串时我就会使用它,并且输入可能是NULL.


vis*_*tor 5

我认为它实际上是未定义的行为,并没有被编译器检查.你很幸运,这个实现会引发异常.

但是,您可以通过以类型无关的方式指定要进行默认或零初始化来避免此类问题:

struct Foo
{
   X id;
   Foo() : id() {} //note empty parenthesis
};
Run Code Online (Sandbox Code Playgroud)

  • 此语法意味着内置类型的零初始化. (3认同)