如何解决名称查找过程是否被视为对glvalue的一种评估
int main(){
int x = 0; //#1
{
int x =1; //#2
x = 2; //#3
}
}
在标有#3
的位置,名称查找规则应用于id表达式x
,它将找到#2
中声明的实体,而不是{{1} }在x
中声明,我认为这样的操作听起来像glvalue的定义,即:
basic.lval#1.1
glvalue是表达式,其求值确定对象,位字段或函数的身份。
换句话说,名称查找过程确定出现在#1
上的x
的身份,#3
是在#2
声明的实体。虽然name lookup
进程通常在编译时发生。但是,该标准中没有规则明确声明表达式evaluation
在运行时或编译时出现,对吗?因此,我想知道name lookup
进程是否可以视为evaluation of glvalue
?而且overload resolution for function
(该过程用于确定调用哪个函数),这不是确定函数身份的过程吗?
也许,您可以列出一个特殊情况,即参考,例如:
int main(){
int v = 0;
int& rf = v;
{
int v2 = 0;
int& rf = v2;
rf = 2; //#3
}
}
名称查找规则也适用于引用,但是引用既不是object
,bit-field
也不是function
。在[basic.lval#1.1]中未列出。
然而,在某些情况下,名称查找的操作和glvalue的定义确实使人困惑。如果我误读了[basic.lval#1.1],请纠正我!请指出标准中的哪个规则区分了这两个概念。谢谢。
此外,如果名称查找和glvalue评估是不同的过程,那么我会争辩说,一旦名称查找找到了id表达式的实体,那么对这样的id表达式执行glvalue的评估是否是多余的?再次?(例如,在我的第一个示例中,x
的名称x
的实体根据ODR规则是唯一的)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。