void S(){}
struct S{};
int main(){
S();
}
在上面的代码中,main 中的表达式 'S()' 被视为函数调用表达式,而不是尝试创建一个临时的 'S' 类型。
C++ 标准的哪一部分讨论了这种表达式的解析以支持函数声明?由于某种原因,我无法找到它。
void S(){}
struct S{};
int main(){
S();
}
在上面的代码中,main 中的表达式 'S()' 被视为函数调用表达式,而不是尝试创建一个临时的 'S' 类型。
C++ 标准的哪一部分讨论了这种表达式的解析以支持函数声明?由于某种原因,我无法找到它。
第 3.3.7/2 节
类名 (9.1) 或枚举名 (7.2) 可以被在同一范围内声明的对象、函数或枚举器的名称隐藏。 如果一个类或枚举名称和一个对象、函数或枚举器在同一个范围内(以任何顺序)以相同的名称声明,则无论对象、函数或枚举器名称可见,该类或枚举名称都会被隐藏。
那么你需要在这种情况下使用详细的类型说明符
3.4.4/1 详细类型说明符
详细类型说明符可用于引用先前声明的类名或枚举名,即使该名称已被非类型声明(3.3.7)隐藏。 详细类型说明符中的类名或枚举名可以是一个简单的标识符,也可以是一个合格的 id。
它可以通过使用范围解析运算符 (::) 或使用 virtual 关键字来解决(当我们处理多重继承或混合继承时。