检查std:string指针的空值 在C++中,据我所知,我相信一个 STD::String 不能代表一个值的缺失。因此,如果方法返回指向std::string的指针,例如,std::string*myMethod()。检查myMethod的返回值是否为NULL有意义吗

检查std:string指针的空值 在C++中,据我所知,我相信一个 STD::String 不能代表一个值的缺失。因此,如果方法返回指向std::string的指针,例如,std::string*myMethod()。检查myMethod的返回值是否为NULL有意义吗,c++,stdstring,gsoap,C++,Stdstring,Gsoap,与我的问题相关的用例如下:std::string*method()是由gsoap存根库从WSDL文件自动创建的。我没有访问WSDL文件的权限,因此无法更改该方法的签名。我的C++应用程序是客户端,服务器是java应用程序。这两个应用程序都通过web服务进行通信是的,这很有意义 返回类型是字符串类型的指针。指针包含地址,可能为空 在这种情况下,返回指针和null检查是正确的方法 如果您不想检查null,那么另一种选择是通过引用返回,但是用法很复杂,在用于操作符链接时最适合。这是否适合当前用例本身是

与我的问题相关的用例如下:std::string*method()是由gsoap存根库从WSDL文件自动创建的。我没有访问WSDL文件的权限,因此无法更改该方法的签名。我的C++应用程序是客户端,服务器是java应用程序。这两个应用程序都通过web服务进行通信

是的,这很有意义

返回类型是字符串类型的指针。指针包含地址,可能为空

在这种情况下,返回指针和null检查是正确的方法

如果您不想检查null,那么另一种选择是通过引用返回,但是用法很复杂,在用于操作符链接时最适合。这是否适合当前用例本身是另一个问题


如果函数返回一个
std::string*
,可以检查它是否返回
NULL
(或者更好的是,
nullptr
),因为您不检查字符串本身,而是检查指向字符串的指针。

是的,这很有意义。相关部分隐藏在注释中:“method()是从WSDL文件自动创建的”。在基于文本的协议(如遵循“key-value”模式的WDSL)中,缺少密钥在语法上不同于
key=”“
空密钥。泛型库不能假定两者在语义上是等价的。因此,它将使用
return nullptr
来表示没有键。

是,因为
std::string*
是指向字符串的指针,而不是
std::string
;指针可以是
nullptr
。尝试使用nullptr如果函数返回指针,则可能需要进行测试。是否确实需要区分缺少字符串和空字符串?您的用例是什么?您还可以执行类似的操作,这可以返回一个。您可以修改函数以返回一个
std::pair
,其中该对的
第二个
成员表示字符串是否“存在”。在这种情况下,返回指针几乎肯定是一个糟糕的主意。使用类似Boost.Optional的东西…如果您不想检查null,那么引用从何而来…如果他确信当前签名不会有这样的用例,那么这是一种替代方法…您如何决定是返回引用还是返回指针,以及折衷是什么??该链接清楚地表明了这一点。@basav“如果您不想检查null,那么通过引用返回”–不,为什么?很可能您不想返回引用,只想返回一个值。(看起来OP正在尝试动态生成某种字符串,不一定要将其存储在对象中;返回对局部变量的引用没有任何好处。)更改了答案..只是建议了一种替代方法,不一定是正确的方法。在这种情况下,考虑这两种情况,选择什么是最好的。