代码之家  ›  专栏  ›  技术社区  ›  Bobby

复合字面值总是左值吗?

  •  1
  • Bobby  · 技术社区  · 5 月前

    我在看书 C专业人士须知 ,其中,它声称 复合文字 只能是 阿尔瓦卢斯 。但法学硕士对此的回答喜忧参半,认为这可能取决于背景,也可能是 右值 在某些情况下。

    当我使用godbolt.org时,我发现标量 复合文字 进行优化 字面量 由编译器。例如, (int) {47} 47 当编译成汇编时;而前者是 阿尔瓦 后者是 右值 我引用了 C23标准 ,N3220.pdf,我惊讶地得知该标准没有使用该术语 右值 (它使用 非左值 )我的一生都在撒谎。很少 阿尔瓦卢斯 喜欢 (register int) {47} 根本无法解决,但它是一个 左值 我刚刚意识到我对 左值 这不是我想的,有人能解释一下吗?此外,还有 复合文字 总是 阿尔瓦卢斯 ?

    1 回复  |  直到 5 月前
        1
  •  6
  •   Nate Eldredge    5 月前

    忘掉所有的书和法学硕士的幻觉,直接去 the spec :

    6.5.2.5 p6:复合文字的值是与未命名对象对应的左值的值。

    所以很明显,这是一个左值。