我遇到类似这样的回顾一些代码的东西来的?有人可以解释一些这种用例吗?比较字符串的地址用NULL
回答
不,你表现的代码,比较不进行任何形式的意识,总是会评估为true。
我大胆猜测:
mystring
原是char*
(也许C代码)。- 有人将其盲目地重构为
std::string
。 - 这导致编译器错误,并使其静音,地址运算符被放置到位。
编辑: 这可能是值得的DoSomething
有定睛一看,来确定,如果代码应该检查是否有一个空字符串代替。但是如果代码通过所有测试,我想说,它很可能会被简单地删除。
当OP发布[MCVE]的工作时,没有人会发现我们正在猜测**伪代码的意图吗? –
@sleeptight:我想说,MCVE足以应付(甚至可能是实际的)。如果它不符合OP的实际代码,那是他的问题。但是我已经看到了足够多的类似移植和重构工件,因此我认为它不会很好地反映实际代码。 – MikeMB
这是否有意义?
不,它没有任何意义。变量的地址永远不会等于NULL
。
有人可以解释一下这个用例吗?
也许这是一个尝试检查一个破碎的编译器或代码中的一些UB的健全性。无论如何,我怀疑这会非常有效。
假设编译器没有坏掉,我认为这个条件没有用。这是一个假设,我们大多数人都必须/必须每天都做。
由于H. Guijt的建议,我也觉得合理的,检查是重新理假象所发生的时候累程序员改变了代码使用std::string
,而不是一个指针,然后“固定”测试在语法上是正确的,即使它现在没有意义。
编译器是g44 4.8 ...所以我认为这不是原因。所以基本上条件总是正确的,因为地址是nevel NULL,所以DoSomething()将始终执行 – redobot
@redobot肯定是不是唯一的编译器代码将被编译:)是的,你有这个想法。 – user2079303
@redobot破坏的编译器通常用'--disable-bootstrap'(测试编译器是否可以自行编译)或禁用其他内部一致性检查来构建。该版本无关紧要。 –
没有意义。
std :: string mystring;被分配在堆栈中。
所以你正在验证在堆栈中分配的这个变量的地址不为空。这是不可能的,除非有一个奇怪的内存损坏。
https://en.wikipedia.org/wiki/Stack_(abstract_data_type)#Basic_architecture_of_a_stack
就编程语言而言,它不是*“分配在堆栈上”*。它具有自动存储时间或静态存储时间。这是如何实现的,取决于C++的实现。不过,无论哪种方式,它都会在发布的代码段中有一个不同于'nullptr'的地址。 – IInspectable
或甚至动态分配,如果它是一个类的实例的成员,并且该实例是动态分配的。 –
@IInspectable:虽然这是主题。除非我们知道变量的范围,否则我们不能确定它是否被“分配到堆栈上”,我猜'Automatic'有一些东西可以处理'堆栈存储','Global'有一些东西可以处理'static storage' – sameerkn
- 1. 比较字符串数组输出Null
- 2. 如何比较字符串null laravel
- 3. 比较2在C中的字符串格式的IP地址
- 4. 将字符串网址与字符串值进行比较
- 5. 字符串比较
- 6. 比较字符串
- 7. 比较字符串
- 8. 字符串比较
- 9. 字符串比较
- 10. 字符串比较
- 11. 比较字符串
- 12. 比较字符串
- 13. 字符串比较
- 14. 比较字符串
- 15. 字符串比较
- 16. 比较字符串
- 17. 字符串比较
- 18. 字符串比较
- 19. 字符串比较?
- 20. 用于字符串比较
- 21. 本地化字符串比较
- 22. JavaScript:Chrome不正确地比较字符串
- 23. 比较字符串串联
- 24. 比较字符串指针?比较字符串C
- 25. 字符串比较用字符
- 26. 字符串比较没有比较
- 27. CoffeeScript的字符串比较
- 28. ArrayList的字符串比较
- 29. 比较字符串的ArrayList
- 30. 的java字符串比较
除非'string'是一个重载'operator&'的类,条件总是'true'。 – Jarod42
不,字符串是来自STL – redobot
的标准字符串,“跨越类似的东西”或发布实际代码。 –