3
void S(){}
struct S{};

int main(){
   S();
}

在上面的代码中,main 中的表达式 'S()' 被视为函数调用表达式,而不是尝试创建一个临时的 'S' 类型。

C++ 标准的哪一部分讨论了这种表达式的解析以支持函数声明?由于某种原因,我无法找到它。

4

2 回答 2

5

第 3.3.7/2 节

类名 (9.1) 或枚举名 (7.2) 可以被在同一范围内声明的对象、函数或枚举器的名称隐藏。 如果一个类或枚举名称和一个对象、函数或枚举器在同一个范围内(以任何顺序)以相同的名称声明,则无论对象、函数或枚举器名称可见,该类或枚举名称都会被隐藏

那么你需要在这种情况下使用详细的类型说明符

3.4.4/1 详细类型说明符

详细类型说明符可用于引用先前声明的类名或枚举名,即使该名称已被非类型声明(3.3.7)隐藏。 详细类型说明符中的类名或枚举名可以是一个简单的标识符,也可以是一个合格的 id。

于 2010-11-04T05:14:05.827 回答
0

它可以通过使用范围解析运算符 (::) 或使用 virtual 关键字来解决(当我们处理多重继承或混合继承时。

于 2017-03-30T17:24:02.163 回答