gpt4 book ai didi

c++ - 使用 const std::string& 作为方法参数类型时,处理 nullptr const char* 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 05:32:54 27 4
gpt4 key购买 nike

我有一个采用const std::string& 参数的方法。它通常像这样使用:a.doSomething("some string") 但我想检查提供的字符串是否不是从 nullptr 隐式构造的。

一个例子:

#include <string>

struct A {
void doSomething(const std::string& arg) {
// if (arg == nullptr) throw; // This is what I want (doesn't work)
if(arg.empty()) // This does not detect nullptr
throw;
}
};

int main(int argc, char* argv[]) {
const char* null_str;
std::string s("");
A a;
a.doSomething(null_str);
a.doSomething(s);

return 0;
}

执行此操作的正确、优雅的方法是什么?我是否应该提供一个重载 doSomething(const char* arg) ,它会在将 arg 显式构造为 std::string 之前检查它并将其传递给另一个重载?

最佳答案

if (arg == nullptr) throw; 

不起作用,因为 arg 永远不能为空。您传递对 arg 的引用,并且引用永远不能为空。所以不需要检查null。您可以简单地删除 null 检查,因为它不合适。

参见:

https://isocpp.org/wiki/faq/references#refs-not-null

如果你想检查空 char* 指针,那么是的,你需要一个接受 char* 的函数:

 void doSomething(const char* arg)

您可以更改 void 以返回结果代码或引发异常或其他一些事情。

关于c++ - 使用 const std::string& 作为方法参数类型时,处理 nullptr const char* 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com