我想替换这样的代码:
if ((obj != nullptr) && obj->is_valid())
Run Code Online (Sandbox Code Playgroud)
同
if (obj->is_valid())
Run Code Online (Sandbox Code Playgroud)
哪里
class Obj {
bool is_valid() {
if (this == nullptr)
return false;
// some more logic ...
}
...
};
Run Code Online (Sandbox Code Playgroud)
显然有两个条件:
obj 始终通过指针访问Obj::is_valid() 从不虚拟这是基于以下事实:非虚方法接受this作为其第一个参数,因此
obj->is_valid();
Run Code Online (Sandbox Code Playgroud)
被重写为
Obj::is_valid(obj);
Run Code Online (Sandbox Code Playgroud)
虽然这段代码与gcc-5.4.0一样正常工作,但我的问题是这是否是一个合法的C++代码,将由其他(较旧/较新)的C++编译器正确解释/优化?
别.
if (this == nullptr)
Run Code Online (Sandbox Code Playgroud)
它不会提供任何安全性,因为在空指针上调用成员函数(方法)首先是未定义的行为.这带来了一种没有安全感的安全感,这比没有任何事情更糟糕.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |