在C中返回NULL指针

Pep*_*nds 0 c++ null stdstring

我之前对这个问题有不同的答案,所以决定再问这里.

假设我有一个功能node* foo(),如果有一些失败,我做return NULL.这段代码真的返回NULL指针吗?或者这NULL是一个local temporary object?编译时我没有警告.我还可以写下这样的东西:

node* ptr = foo();
if (ptr)
    printf("Not NULL");
else
    printf("NULL");
Run Code Online (Sandbox Code Playgroud)

它似乎有效.(但如果这个功能是,例如const string& foo()它没有)

Gya*_*ain 11

NULL 是一个指针文字,定义为包含一个特殊值.

一个可能的定义是:

#define NULL ((void *)0)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请阅读此常见问题解答

关于const string& foo(),我相信你的意思是C++的std::string. 的std :: string没有隐含的构造与NULL指针进行初始化.因此,您应该使用一些异常或空字符串来向调用者指示错误.(如果你没有抛出,你必须返回一个std::string.即使返回的对象是本地的,当它保存在局部常量引用中时它的寿命会延长.但返回其他类型并期望隐式转换不是一个好主意.)

回答你的问题:因为NULL是文字,所以大部分时间都不能创建临时对象,实际值可以直接返回给调用者.