比较string的地址和NULL

时间:2016-06-10 09:24:30

标签: c++

我遇到了类似于审查一些代码的内容:

std::string mystring;
if (&mystring != NULL)
{
   DoSomething();  
}

这有什么意义吗?有人可以解释一下这个用例吗?

3 个答案:

答案 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