【发布时间】:2014-11-19 08:46:42
【问题描述】:
#include <iostream>
struct Foo { static auto foo() -> int { return 123; } };
int main() {
std::cout << static_cast<Foo*>(nullptr)->foo() << std::endl;
return 0;
}
我知道这是标准不允许的。但是,具体的编译器呢?
我只关心 GCC(G++) 和 Clang。
是否可以保证这两个编译器允许将其作为编译器功能/规范/扩展?
【问题讨论】:
-
这更像是一个“副作用”而不是功能。可能在调试模式下,可以检查访问结构成员的空指针。在 Release 中,这可能是很重的负载。
-
您正在调用 static 函数,因此甚至没有使用空指针。如果它不是 static 函数,那么它仍然可以工作,因为不需要通过空指针来寻址任何内存。但是我相信这种行为仍然是不确定的。
标签: c++ gcc static clang null-pointer