gpt4 book ai didi

c++ - 引用表达式的评估

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:35 27 4
gpt4 key购买 nike

根据@Potatoswatter 的建议,我创建了一个新的讨论。

引用是 this response来自@Potatoswatter

给定代码片段,

int i = 3, &j = i; 
j = ++ i;

我希望澄清的评论是这样的。 (这似乎是我对未排序评估 a.k.a 序列点的理解中缺失的重要部分):

@Chubsdad: Even though it's an alias, its glvalue evaluation does not require a glvalue evaluation of i. Generally speaking, evaluating a reference does not require the original object to be on hand. There's no reason it should be UB, so it makes sense there should be an easy loophole or transformation to code which is not UB.

The reference doesn't tell the compiler to go look at the referenced variable and get its lvalue, because it might not know what variable is referenced. The compiler computes the lvalue of the reference and that lvalue identifies an object. If you want to debate this further, please open a new question.

问题中任何可能不明确的地方都是“未定义行为”的一部分,我正在尝试理解 C++0x 中的“无序评估”、“序列点”等。

最佳答案

想象一下

int &i = *new int;

如果你说 i 是另一个名字的别名——什么名字?引用要么引用对象,要么引用函数。当您说“glvalue”时,您指的是特定表达式的属性,而不是对象的属性。

int i = 0;
int &ri = i;

现在,i 是一个左值表达式,ri 也是一个左值表达式(都是语法类别 id-expression)。它们命名(通过名称查找找到)一个引用和一个int 变量。

如果您现在确定ri 情况的对象身份,您需要获取引用并使表达式引用它被初始化的对象。这称为左值评估,因为您确定左值的属性(即所指对象)。

您需要对 i 情况执行相同的操作。也就是说,你弄清楚左值表达式 i 指的是什么对象。因此,ri 的泛左值评估不同于 i 的泛左值评估,尽管它们都产生相同的结果。

右值求值意味着取一个左值并将左值应用到右值转换。换句话说,读取一个值。

关于c++ - 引用表达式的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com