假设声明中某些上下文中需要的名称查找规则是什么
what are name lookup rules within the hypothetical declaration that required in some contexts
问题 1:
int v = 10;
auto f = [v = v](){};
考虑上面的代码,标准中提到的一些规则将适用于它。
[expr.prim.lambda.capture#6]
init-capture 的行为就像它声明并显式捕获 "auto init-capture; 形式的变量,其声明区域是 lambda 表达式的复合语句。
引用意味着auto v = v;
将在 lambda 的复合语句中声明,就好像它是这样的:
//hypothetical code
int v = 10;
auto f = [](){
auto v = v; //the second `v` is the first `v` and will be initialized by an indetermined value.
};
所以,对于假设的声明auto v = v;
,我认为会和以下规则相冲突。
[basic.scope.pdecl#1]
名称的声明点紧接在其完整声明符之后和初始值设定项(如果有(之前 [ 示例:
无符号字符 x = 12;
{ 无符号字符 x = x; }
在这里,第二个 x 使用它自己的(不确定(值进行初始化。 — 结束示例 ]
问题 2:
void func(int v){}
int v = 0;
func(v);
我们知道函数参数的初始化将在调用函数的上下文中进行,并且将是复制初始化。我们忽略了标准中的引号,因为它们太多了。因此,参数的复制初始化将出现在调用函数上下文中的某个地方,就好像它喜欢这样的形式一样:
//hypothetical code
int v = v; // initialization of a parameter that occured in somewhere within context of calling function
与问题 1 相同的问题,当声明符 id 的名称与初始值设定项中的 id 表达式的名称相同时,如何解释这些问题,当它们发生在这些假设的副本初始化上下文中时。这些假设的副本初始化是否与规则[basic.scope.pdecl#1]相矛盾
问题:
我想知道 在初始值设定项中查找 id 表达式是否早于假设声明发生? 我为什么这么认为? 因为,相反, 在通常的声明中,初始值设定项的查找发生在声明符立即完成后,如[basic.scope.pdecl#1]中所述, 这意味着声明符 id 将隐藏初始值设定项中的 id-表达式,如果它们是相同的名称。
标准中是否有任何引用来解释这一点?
[basic.scope.pdecl] 中的initializer
是指解析器使用的语法规则元素。它在 [dlc.init] 中定义,并出现在init-declarator
语法规则中。
对于lambda捕获的情况,标准指定它等效于初始化声明器,但其声明区域是lambda表达式的复合语句[...]也就是说,捕获名称不在初始值设定项的范围内。
术语initialization
不是指术语initilizer
所指的语法规则。initialization
是初始化变量的表达式计算,但这不是语法规则。涉及这两个术语的规则不能冲突,因为它们不是编译>执行过程的同一阶段的一部分:
1(initializer
、declarator
或init-caputure
等的语法规则...用于确定哪个对象引用初始值设定项中显示的 ID 表达式(表达式中的名称(。id-表达式是一个glvalue。glvalue 引用一个对象,它没有名称。
2(那么这些gl值是执行initialization
表达式的一部分。进行此初始化时,名称无关紧要。
注意:在标准中,许多规则都引用语法规则,您应该注意格式化以识别它们,因为它们的名称本身并不比数学方程中出现的变量名称更有意义。
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 此代码是否违反一个定义规则
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 假设声明中某些上下文中需要的名称查找规则是什么
- 在类内定义的友元函数与类外定义的友元函数的查找规则之间的差异
- 哪里定义了查找名称最直接声明的名称查找规则
- 如何让叮当揉捏两相查找的规则
- 哪个查找规则阻止编译器查找函数
- 模板功能中的名称查找规则
- 在C++11中查找运算符的规则
- 成员名查找规则
- 嵌套名称说明符的名称查找规则
- 什么名称查找规则适用于静态 const 数据成员定义中的名称
- 查找规则多边形的顶点
- x / y的确切名称查找规则是什么?