考虑下面的程序:在C++中打印函数地址,g ++/clang ++ vs vC++,谁对?
#include <iostream>
void foo() { }
int main() {
std::cout<<static_cast<void*>(foo);
}
它编译罚款VC++
但g++
& clang++
给出编译错误。
见现场演示here(VC++
)
见现场演示here(clang++
)
见现场演示通过g++
& clang++
给出here(g++
)
诊断:
source_file.cpp: In function ‘int main()’:
source_file.cpp:4:38: error: invalid static_cast from type ‘void()’ to type ‘void*’
std::cout<<static_cast<void*>(foo);
^
所以,问题是根据C++标准哪个编译器就在这里?我认为g++
& clang++
的行为在这里是正确的。我知道我应该在这里使用reinterpret_cast
而不是static_cast
。在VC++
编译器中有这个bug吗?如果答案取决于C++的具体标准,那么我也很想知道它。
foo衰变成函数指针!!! – Destructor
如果你想要MSVC的正确性,请确保使用最近添加的'/ permissive-'MSVC14.1。这也更一般地提到MSVC,而不是VC++。 – tambre