跟风秀一下
#include <iostream> int g1() { return 10; } void main() { int f1(int()); //声明函数f1 std::cout << f1(g1) << std::endl; //10 int f2(int(*)()); //声明函数f2 std::cout << f2(g1) << std::endl; //20 int f3((int())); //定义变量f3,初始值是int()即0 //std::cout << f3(g1) << std::endl;//编译不过 std::cout << f3 << std::endl; //0 int f4{ int() }; //定义变量f4,初始值是int()即0 //std::cout << f4(g1) << std::endl;//编译不过 std::cout << f4 << std::endl; //0 system("pause"); } int f1(int g()) { return g(); } int f2(int(*g)()) { return 2 * g(); } int f3(int g()) { return 3 * g(); } int f4(int g()) { return 4 * g(); }
为什么f1是函数声明,而不是变量定义?
两个声明都是符合语法规则的。
而作为编译器,在解析时,遵循“max munch”。
如果当作变量定义,显然先解析int()是一个变量,再解析f3是一个变量
而当作函数声明,则是整个表达式
因此f1是一个函数声明
为什么f3是变量定义而不是函数声明?
如果f3是一个函数,那么参数可以省掉变量名却不能省掉变量类型
()是一个表达式,返回一个值,显然缺少变量类型,解析为函数在语法上就不正确