我遇到了类似于审查一些代码的内容:
std::string mystring;
if (&mystring != NULL)
{
DoSomething();
}
这有什么意义吗?有人可以解释一下这个用例吗?
答案 0 :(得分:3)
不,在你展示的代码中,比较没有任何意义,并且总是评估为真。
我猜测:
mystring
最初是char*
(也许是c代码)。 std::string
进行了重构。 编辑:
可能值得仔细查看DoSomething
,以确定代码是否应该检查空字符串。但是,如果代码通过了所有测试,我说,它更有可能被删除。
答案 1 :(得分:2)
这有意义吗?
不,这没有意义。变量的地址永远不会等于NULL
。
有人可以解释一下这个用例吗?
也许这是尝试理智地检查破坏的编译器或代码中的某些UB。在任何一种情况下,我都怀疑它会非常有效。
假设编译器没有损坏,我认为条件没用。这是我们大多数人每天必须做出的假设。
正如H. Guijt建议的那样,我也发现检查是一个合理的假象,当一个疲惫的程序员改变代码使用std::string
而不是指针,然后"修复& #34;虽然现在没有意义,但测试在语法上是正确的。
答案 2 :(得分:-1)
没意义。
std :: string mystring;在堆栈中分配。
所以你要验证堆栈中分配的这个变量的地址不是null。除非存在奇怪的内存损坏,否则这是不可能的。
https://en.wikipedia.org/wiki/Stack_(abstract_data_type)#Basic_architecture_of_a_stack