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

The*_*ine 3 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Car*_*rum 14

这只是一个无操作.函数的名称在该上下文中衰减为指向该函数的指针,但由于您没有对它执行任何操作,因此不会发生任何事情.如果您调高警告级别,您可能会收到"声明无效"的消息.例如,clang ++说(即使没有标志):

example.cpp:11:3: warning: expression result unused [-Wunused-value]
  DeathToAllButMetal;
  ^~~~~~~~~~~~~~~~~~
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)