【发布时间】:2015-02-28 05:57:46
【问题描述】:
我想了解所有允许我们使用:: 运算符来获取访问类数据成员的情况。例如,我们可以使用:: 来访问静态数据成员。其实,
#include <iostream>
struct A
{
static const int b = 3;
};
int main() { std::cout << A::b << std::endl; }
此外,我们可以使用表达式来访问非静态数据成员的brace-or-equal initializer 内的非静态数据成员。
#include <iostream>
struct A
{
int b = 3;
void foo()
{
std::cout << A::b << std::endl;
}
};
int main() { A().foo(); }
我正在寻找涵盖我们可以使用:: 运算符的所有情况的规则。 Strandard 的哪一章告诉我们不应该使用:: 来访问这样的非静态数据成员
#include <iostream>
struct A
{
int b = 3;
};
int main() { std::cout << A::b << std:endl; } //error
【问题讨论】:
-
称为作用域解析算子。它涵盖在整个标准中,并且可以以多种方式使用。我不认为它们被列举在一个地方。
-
我不认为引用标准是解释为什么最后一个示例不起作用的最有用的方法。我认为对范围解析运算符和非静态数据成员的基本解释会更合适。
-
最后一个例子没有意义。它如何知道从哪个实例获取 b。