返回NULL而不是std :: string C ++

时间:2013-11-07 20:25:26

标签: c++ return

我有这个功能:

std::string SWindows::PRecv(int rc, std::string* ip);

在这个函数中,在某些情况下我返回NULL并且代码编译(IDE:VS 2012)。 对我来说,NULL它不是std :: string对象所以我们不能写它。

那么为什么在函数返回std :: string时返回NULL是正确的?

2 个答案:

答案 0 :(得分:7)

NULL相当于C ++中的00是完全有效的char const*常量。字符串类有一个非explicit构造函数取char const*,即编译器将编译代码但它不起作用:即,虽然编译器排除了代码,但它是未定义的行为。< / p>

查看C ++ 11中的定义我看不到delete d重载std::nullptr_t,即从nullptr转换时它也会编译。我希望有delete d重载可以使std::nullptr_t允许编译器捕获这种情况,至少在传递nullptr时。

答案 1 :(得分:4)

您正在做的是从std::string构建char const*等于0(或NULL)。

标准实际上禁止这样做:

  

[C++11: 21.4.2/9]要求:s不应为空指针

但是,GCC对您和does checks to make it a no-op非常友好。它不是必须的,你不应该依赖它。

相关问题