歧义消解

发布于 2024-09-30 10:06:33 字数 184 浏览 3 评论 0原文

void S(){}
struct S{};

int main(){
   S();
}

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

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

void S(){}
struct S{};

int main(){
   S();
}

In the code above, the expression 'S()' in main is treated as a function call expression rather than an attempt to create a temporary of type 'S'.

Which portion of the C++ Standard talks about the resolution of such an expression in favour of a function declaration? For some reason I am unable to locate it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一袭白衣梦中忆 2024-10-07 10:06:33

第 3.3.7/2 节

类名 (9.1) 或枚举名称 (7.2) 可以被同一作用域中声明的对象、函数或枚举器的名称隐藏。 如果类或枚举名称与对象、函数或枚举器是
在相同范围(以任何顺序)中以相同名称声明,类或枚举名称被隐藏
无论对象、函数或枚举器名称可见,

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

3.4.4/1详细的类型说明符

详细类型说明符可用于引用先前声明的类名或枚举名,甚至
尽管该名称已被非类型声明隐藏(3.3.7)。
中的类名或枚举名
详细类型说明符可以是简单标识符或限定 ID。

Section 3.3.7/2

A class name (9.1) or enumeration name (7.2) can be hidden by the name of an object, function, or enumerator declared in the same scope. If a class or enumeration name and an object, function, or enumerator are
declared in the same scope (in any order) with the same name, the class or enumeration name is hidden
wherever the object, function, or enumerator name is visible
.

Then you need to use elaborated type specifier in such cases

3.4.4/1 Elaborated type specifiers

An elaborated-type-specifier may be used to refer to a previously declared class-name or enum-name even
though the name has been hidden by a non-type declaration (3.3.7).
The class-name or enum-name in the
elaborated-type-specifier may either be a simple identifer or be a qualified-id.

亚希 2024-10-07 10:06:33

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

It can be resolved either by using the scope resolution operator(::) or by using virtual keyword(when we are dealing with either multiple or hybrid inheritance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文