大多数像我这样的 C++ 程序员在某些时候都犯了以下错误:
class C { /*...*/ };
int main() {
C c(); // declares a function c taking no arguments returning a C,
// not, as intended by most, an object c of type C initialized
// using the default constructor.
c.foo(); // compiler complains here.
//...
}
现在虽然一旦你知道错误就很明显了,但我想知道这种局部函数声明是否有任何合理的用途,除非你可以这样做——特别是因为没有办法在同一个函数中定义这样的局部函数堵塞; 你必须在别处定义它。
我认为 Java 风格的本地类是我经常使用的一个非常好的特性,尤其是匿名排序。甚至本地 C++ 类(可以具有内联定义的成员函数)也有一些用途。但是这个没有定义的局部函数声明对我来说似乎很尴尬。它只是一个 C-legacy 还是有一些我不知道的更深层次的用例?
为非信徒编辑C c()
:不是函数指针声明。
这个节目
int main()
{
void g();
cout << "Hello ";
g();
return 0;
}
void g()
{
cout << "world." << endl;
}
输出Hello world.
这个程序
void fun()
{
cout << "world." << endl;
}
int main()
{
void g();
g = fun;
cout << "Hello ";
g();
return 0;
}
不编译。gcc 抱怨:
错误:无法在赋值中将 'void ()()' 转换为 'void ()()'
喜剧:
错误:表达式必须是可修改的左值