c ++,调用没有()的函数,这是什么意思?

时间:2013-06-13 03:55:05

标签: c++ g++

五分钟前我做过一些我从未做过的事情(这不是关于性......)看代码:

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

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

int main(){
  DeathToAllButMetal();

  DeathToAllButMetal;

  return 0;
}

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

1 个答案:

答案 0 :(得分: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