以下简单的代码示例对我产生了一些疑问:
#include <iostream>
using namespace std;
struct A
{
int a;
A(int a)
{
A::a = a; //It is unclear, because in that case we're applying
//scope resolution operator to A and does.
this -> a = a; //It is clear, because this points to the current object.
}
};
int main()
{
A a(4);
cout << a.a;
}
我知道3.4.3.1/3节说:
在嵌套声明性区域中由名称隐藏的类成员名称 如果合格,仍然可以找到派生类成员的名称 通过其类的名称后跟:: operator。
但它没有指定名称通过&#34;符合条件的名称查找&#34; (例如,在我的情况下为A::a
)在成员函数内部应表示当前对象的成员。
我正在寻找标准中的相关参考。
答案 0 :(得分:0)
在搜索特定于非静态类成员函数的内容时,您应首先查看管理...非静态类成员函数的子句。 §9.3.1[class.mfct.non-static] / p3:
当 id-expression (5.1)不属于类成员访问时 语法(5.2.5)并不用于形成指向成员(5.3.1)的指针 在可以使用
X
的上下文中,在类this
的成员中使用 (5.1.1),如果名称查找(3.4)解析 id-expression 中的名称 到某个类C
的非静态非类型成员,如果是 id-expression 可能已评估或C
为X
或基类X
, id-expression 转换为类成员访问表达式 (5.2.5)使用(*this)
(9.3.2)作为左侧的后缀表达式.
运算符。 [注意:如果C
不是X
或基类X
,则该类 成员访问表达式格式不正确。 - 结束记录]同样在期间 名称查找,当a的定义中使用 unqualified-id (5.1)时 类X
的成员函数解析为静态成员,枚举器 或嵌套类型的类X
或基类X
, unqualified-id 转换为 qualified-id (5.1),其中 nested-name-specifier 命名成员函数的类。
答案 1 :(得分:0)
C ++。11§5.1.1¶8
nested-name-specifier 表示一个类,可选地后跟关键字
template
(14.2),然后是该类的成员名称(9.2) )或其基类之一(第10条),是 qualified-id ; 3.4.3.1描述了出现在 qualified-ids 中的类成员的名称查找。结果是成员。结果的类型是成员的类型。如果成员是静态成员函数或数据成员,则结果是左值,否则为prvalue。