【发布时间】:2016-08-13 16:44:31
【问题描述】:
以下代码编译得很好,我不知道为什么。有人可以向我解释为什么这是合法的吗?
我正在使用g++ (Debian 6.1.1-10) 6.1.1 20160724 编译。
#include <iostream>
int sum(int x, int y) { return x + y; }
int main(int argc, char *argv[])
{
using std::cout;
int (*) (int, int) = ∑
cout << "what" << '\n';
}
附录
以下程序使用 g++ 5.4.0 版可以正常编译,但在 gcc 中编译失败。
int main()
{
int (*) = 20;
}
【问题讨论】:
-
这是一个无关紧要的细节。这是一个指针。它被分配给一个匿名函数指针。但是“int = 7;”不编译。 “int *=nullptr;”也没有。这里的某个地方可能有一个最令人烦恼的 parse 的表弟。
-
这也编译了
void foo();...int (*) (int, int) = &foo;- 发生了一些奇怪的事情。 (g++ 5.1.0) -
算了。
int (*)(int, int);也可以编译。 -
请在问题中添加编译器信息。
-
还有
int (*) (int, int) = 5.3;(尽量避免衰减到右轴上的指针)
标签: c++ language-lawyer