#include <iostream>
struct Foo { static auto foo() -> int { return 123; } };
int main() {
std::cout << static_cast<Foo*>(nullptr)->foo() << std::endl;
return 0;
}
나는 이것이 표준에 의해 허용되지 않는다는 것을 알고 있습니다. 그러나 특정 컴파일러는 어떻습니까?GCC/Clang은 널 포인터를 통해 정적 멤버에 액세스 할 수 있습니까?
나는 GCC (G ++)와 Clang 만 신경 쓰고있다.
이 두 컴파일러가 컴파일러 기능/사양/확장 기능을 허용한다는 보장이 있습니까?
이것은 "부작용"이 아닌 기능입니다. 아마도 디버그 모드에서 null 포인터에 대한 구조체 멤버에 대한 액세스 검사가있을 수 있습니다. 릴리스에서는 부하가 커질 수 있습니다. – i486
null 포인터가 사용되지 않도록 * 정적 * 함수를 호출하고 있습니다. * 정적 * 함수가 아니면 null 포인터를 통해 메모리를 지정할 필요가 없기 때문에 여전히 작동 할 것입니다. 그러나 나는 그러한 행동이 아직 정의되지 않았다고 믿는다. – Galik