4

五分钟前我做了一件我以前从未做过的事情(这与性无关......)看看代码:

// g++ DeathToAllButMetal.cc
#include<iostream>

void DeathToAllButMetal(){
  std::cout << "A MASTERPIECE MADE BY STEEL PANTHER" << std::endl;
} 

int main(){
  DeathToAllButMetal();

  DeathToAllButMetal;

  return 0;
}

你看我在第二个忘记了“()”,DeathToAllButMetal令人惊讶的是编译器并没有对我大喊大叫。所以对于编译器来说,这行代码意味着什么,但是什么?因为在运行时,该方法没有被调用......这看起来是一个基本问题,但我不记得过去见过这个。

4

1 回答 1

14

这只是一个无操作。函数的名称在该上下文中衰减为指向该函数的指针,但是由于您不对其进行任何操作,因此什么也没有发生。如果您提高警告级别,您可能会收到一条类似于“声明无效”的消息。例如,clang++ 说(即使没有标志):

example.cpp:11:3: warning: expression result unused [-Wunused-value]
  DeathToAllButMetal;
  ^~~~~~~~~~~~~~~~~~
1 warning generated.

G++ 也警告过,但我需要添加-Wall

example.cpp: In function ‘int main()’:
example.cpp:11: warning: statement is a reference, not call, to function ‘DeathToAllButMetal’
example.cpp:11: warning: statement has no effect
于 2013-06-13T03:57:41.957 回答