在§8.2[dcl.ambig.res]/2我们有以下注释(重点是我的):
[ 注意:声明可以通过非函数风格的强制转换、= 表示初始化或 删除参数名称周围的多余括号来明确消除歧义。——尾注]
它不应该在上面插入而不是删除吗?
考虑以下示例:
#include <iostream>
struct S{ int i; S(int j) : i(j) {} };
float f = 1.0f;
S s(int(f)); // function declaration
int main()
{
std::cout << s.i << '\n';
}
代码无法编译,因为编译器将声明S s(int(f));
视为函数声明。但是如果我们确实在参数名称周围插入括号f
,就像S s((int(f)));
代码编译并打印 1 一样。