gpt4 book ai didi

c++ - 为什么字符串文字是左值,而所有其他文字都是右值?

转载 作者:IT老高 更新时间:2023-10-28 13:58:59 26 4
gpt4 key购买 nike

C++03 5.1 主要表达式 §2 说:

A literal is a primary expression. Its type depends on its form (2.13). A string literal is an lvalue; all other literals are rvalues.

同样,C99 6.5.1 §4 说:

A string literal is a primary expression. It is an lvalue with type as detailed in 6.4.5.

这背后的原理是什么?

据我了解,字符串文字是对象,而所有其他文字都不是。而左值总是指一个对象。

但是问题是为什么字符串文字是对象而所有其他文字都不是?在我看来,这个理由更像是鸡蛋或鸡肉的问题。

我知道这个问题的答案可能与硬件架构有关,而不是 C/C++ 作为编程语言,但我想听听同样的。

最佳答案

字符串字面量是具有数组类型的字面量,在 C 语言中,数组类型除了作为左值之外无法存在于表达式中。可以将字符串文字指定为具有指向字符串“内容”的指针类型(而不是通常衰减为指针的数组类型),但这会使它们的用处不大;特别是,sizeof 运算符无法应用于它们。

请注意,C99 引入了复合字面量,它们也是左值,因此让字面量成为左值不再是一个特殊的异常(exception);它更接近成为常态。

关于c++ - 为什么字符串文字是左值,而所有其他文字都是右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004511/

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