C++ 什么名称查找规则适用于静态常量数据成员定义中的名称
在数据成员的合格id之后,有一个引用描述的名称查找应用于常量静态数据成员的数据成员:C++ 什么名称查找规则适用于静态常量数据成员定义中的名称,c++,class,static,member,C++,Class,Static,Member,在数据成员的合格id之后,有一个引用描述的名称查找应用于常量静态数据成员的数据成员: class A { static const int i = x;//x is a name defined an arbitrary const int }; 秒。3.4.1/13: 类X的静态数据成员定义中使用的名称 (9.4.2)(在静态构件的合格id之后)查找为 如果在X的成员函数中使用了该名称 但我们可以定义类内静态常量数据成员: class A { static const int
class A
{
static const int i = x;//x is a name defined an arbitrary const int
};
秒。3.4.1/13:
类X的静态数据成员定义中使用的名称
(9.4.2)(在静态构件的合格id之后)查找为
如果在X的成员函数中使用了该名称
但我们可以定义类内静态常量数据成员:
class A
{
static const int i = x;//x is a name defined an arbitrary const int
};
美国证券交易委员会的规则。3.4.1/13不适用于名称x
查找实际将应用什么规则?请参考标准中的相应条款。
例如,以下代码是有效的:
#include <stdio.h>
const int a=5;
class A
{
public:
static const int b=a;//b is unqualified-id of this data-member
};
int main(){ printf("%d\n",A::b); } //5
#包括
常数INTA=5;
甲级
{
公众:
static const int b=a;//b是此数据成员的非限定id
};
int main(){printf(“%d\n”,A::b);}//5
以下代码也有效:
#include <stdio.h>
class A
{
public:
static const int a=7;
static const int b=a;
};
int main(){ printf("%d\n",A::b); } //7
#包括
甲级
{
公众:
静态常数INTA=7;
静态常数int b=a;
};
int main(){printf(“%d\n”,A::b);}//7
但以下内容无效:
#include <stdio.h>
class A
{
public:
static const int b=a; //error: a was not declare in this scope.
static const int a=7;
};
int main(){ printf("%d\n",A::b); }
#包括
甲级
{
公众:
static const int b=a;//错误:a未在此范围内声明。
静态常数INTA=7;
};
int main(){printf(“%d\n”,A::b);}
尚不清楚应用于查找
a
的规则静态数据成员的类内声明不是定义,即使它包含初始值设定项。因此§3.4.1/13不适用于您的示例
类作用域中的名称查找由作用域到达类作用域的规则定义。§3.3.7/1.1:
a
在封闭的命名空间中声明,因此可以找到它。在第二个示例中,a
在使用前声明
但在第三个示例中,它是在声明之前使用的,这是非法的-如果在封闭的名称空间中声明了某个a
,则由于3.3.7/1.2,它将是未定义的行为
#include <stdio.h>
const int a=5;
class A
{
public:
static const int b=a; // The quote corresponds to the lookup for a.
// It says that the lookup logic for a is the same
// as the lookup for a name in a member function of A
};
当你使用
static const int b = a;
从函数
foo
中查找a
将是(2)和(3),因为a
不能是局部变量。在您的案例中定义了x
在哪里?很明显,它不可能在任何地方。我不明白这个问题;您引用的文本表示查找与void member(){x;}
的查找相同。“你是在问如何在成员函数中查找名称吗?”Praetorian x在某处定义。我想了解范围的后续部分查找了名称x。@MattMcNabb No.Quote说,此查找与qualified-id相同。但是,使用静态常量数据成员的非限定id进行查找如何?您将限定和非限定查找与限定id相混淆。后者,在该Quote中,是指静态数据成员标识符(i
),当您提供定义时,需要使用类名(和命名空间名)限定该标识符,例如,const int NS::a::i代码>-因此短语qualified-id.§3.4.1/13表示§3.4.1/8下列出的规则将用于查找x
。那么,我的示例将应用什么规则?我不明白,谢谢!我理解你。