使用 VSCode & VS 获取 C++ 函数地址

Getting C++ Function Address using VSCode & VS

我已经在 VSCode 中尝试了这段代码,理论上输出应该给我函数的地址

#include<iostream>
using namespace std;
int getNumber(){
    return 9000;
}

int main(){
    cout<<getNumber<<endl;
    return 0;
}

一旦我运行 VSCode中的代码,输出是:1

所以我让我的朋友在Visual Studio上运行完全相同的代码(因为我没有VS),输出是一个内存地址。

我的问题是,

  1. 为什么在 VSCode 和 VS 中 运行 时,该代码的输出不同?
  2. 我应该怎么做才能使用完全相同的代码在 VSCode 中获取该函数的地址?

std::ostream::operator<< 有一个重载 bool 并且指针可以隐式转换为 bool,所以 VSCode 的输出(你告诉我们你在哪里用 mingw 编译)是正确的。由于函数 getNumber 的地址必然是非零的,因此当转换为 bool 时,它变为 true,等于 1,因此这就是打印的内容。

另一方面,MSVC(Visual Studio 用来编译您的代码)似乎出错了。

要确保输出函数的地址,您可以这样做:

cout << (void *) getNumber << endl;

同样,void * 的特定重载确保 getNumber 随后被解释为地址。


附录: 如果设置了足够高的警告级别,gcc 将对此发出警告,请参阅:https://wandbox.org/permlink/J9kxSzLshRQsdt0e