gpt4 book ai didi

c++ - 采用左值操作数的运算符的结果是一个左值,表示该左值操作数?

转载 作者:行者123 更新时间:2023-12-02 10:28:36 24 4
gpt4 key购买 nike

在阅读Bjarne的CPP书籍时,我遇到了这样一条语句:“在逻辑上可行的情况下,采用左值操作数的运算符的结果是表示左值操作数的左值”,我实在无法绕开它。这些是此语句包含的示例:

void f(int x, int y)
{
int j = x = y; // the value of x=y is the value of x after the assignment
int∗ p = &++x; // p points to x
int∗ q = &(x++); // error : x++ is not an lvalue (it is not the value stored in x)
int∗ p2 = &(x>y?x:y); // address of the int with the larger value
int& r = (x<y)?x:1; // error : 1 is not an lvalue
}
代码本身对我来说很有意义,但是从我对这些运算符的工作方式的个人理解来看,它才有意义。但是我不能在这里真正应用该语句,例如第一行。好吧, =是可以同时使用左值和右值操作数的运算符(据我所知,在这种情况下,左值被隐式转换为右值),然后 x = y的结果是一个左值,表示 y吗?如果我正确地遵循了这一点,那么我可以编写 int* j = x = y,但这将是编译时错误,因为 x = y的结果显然是右值。所以我真的很困惑。
任何人都可以逐步弄清此语句的语义以及它与给定示例的逐步关系吗?

最佳答案

  • x = y返回引用左操作数的左值。
  • int* j = x = y,这是错误的,因为操作数的类型无效。

  • 但,
  • int* j = &(x = y):
    起作用,因为x = y返回l值,所以将其归结为int *j = &x(x的值为y)
    同样,这个int& j = x = y也可以

  • 附加链接:
    对于条件表达式: Return type of '?:' (ternary conditional operator)

    关于c++ - 采用左值操作数的运算符的结果是一个左值,表示该左值操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63217129/

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