【发布时间】:2014-11-24 22:07:41
【问题描述】:
如果我返回某个原始类型对象的地址,则在函数中。我可以保证它永远不会是 NULL 值吗?
我是否需要使用类似
的语句检查NULL
if (r_value) { //do something }
else { //ERROR }
?
【问题讨论】:
-
很多假设架构的答案...
标签: c++ c return return-type
如果我返回某个原始类型对象的地址,则在函数中。我可以保证它永远不会是 NULL 值吗?
我是否需要使用类似
的语句检查NULL
if (r_value) { //do something }
else { //ERROR }
?
【问题讨论】:
标签: c++ c return return-type
对象的地址永远不会为空。
注意不要返回指向非静态局部变量的指针。那会在函数返回时被销毁,所以指针无效;但它不会为空,也无法判断它不再有效。
在 C++ 中,我会返回一个引用而不是一个指针,以明确它不会为空。当然,这不是 C 中的选项。我不知道你问的是两种标记语言中的哪一种。
【讨论】:
保证现有对象的地址不为 NULL。因此,如果您使用这样的地址,则 NULL 检查没有意义。
【讨论】:
对象的地址永远不能为空。 所以不需要检查返回值是否为NULL。
但请确保您返回的此类变量的地址在被调用函数返回时不会超出范围。
我的意思是,如果你返回任何在堆栈上获得内存的对象的地址,从函数返回后,它的堆栈帧将被弹出,因此返回的地址将不再指向所需/有效的位置。这可能会导致您的程序出现运行时错误。
因此,请确保您没有返回非静态局部变量或具有寄存器存储类的变量的地址。
如果调用的函数不是由您维护,并且将来有可能更改,那么作为一般的编码实践,为了避免将来的麻烦,您可以检查返回值是否为 NULL,否则无需检查根据我的说法,针对 NULL 的返回值。
【讨论】: