gpt4 book ai didi

c++ - 使用点访问匿名枚举值

转载 作者:可可西里 更新时间:2023-11-01 16:36:54 26 4
gpt4 key购买 nike

此代码可与 GCC 和 Clang 一起编译(并且似乎可以工作):

#include <iostream>

struct Foo {
enum { number = 42 };
};

int main()
{
Foo bar;
std::cout << bar.number << std::endl;
}

See it here.

令我惊讶的是,编译器接受bar.number;我能找到的所有教科书都教导使用 Foo::number 来访问枚举值。

此代码有效吗?请注意,GCC 给出了一个奇怪的警告(“设置了变量‘bar’但未使用”),而 Clang 并没有提示它。

最佳答案

这是完全有效的:

[C++11: 7.2/10]: Each enum-name and each unscoped enumerator is declared in the scope that immediately contains the enum-specifier. Each scoped enumerator is declared in the scope of the enumeration. These names obey the scope rules defined for all names in (3.3) and (3.4). [..] An enumerator declared in class scope can be referred to using the class member access operators (::, . (dot) and -> (arrow)), see 5.2.5.

可以在 C++03 标准中的相同位置找到相同的文本(减去作用域枚举的规则)。

我不得不承认,这也让我有些吃惊。我原以为 :: 是唯一有效的机制。

您在 GCC 中收到的警告不是关于枚举的使用,而是关于您除了没有使用枚举这一事实。在这种情况下,您通常会编写 Foo::number 并避免实例化 Foo 实例。

关于c++ - 使用点访问匿名枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com