总是我的理解是,l值必须进行评估,但是有一些明显且容易解释的原因。标识符表示存储区域,该值位于该存储中,必须进行检索。那讲得通。但是需要评估文字的程序(例如,整数21)对我来说并没有多大意义。价值就在那里,你能得到多少明确的答案?好吧,除了为无符号或其他后缀添加U.这就是为什么我对需要评估的文字感到好奇的原因,因为我只在一个地方看过这个。大多数书籍也会切换术语,例如" Primary Expression," "操作数,"或"子表达"等等,直到线开始模糊的程度。在这段时间里,我还没有看到对这一特定事物的明确解释。这似乎是对处理能力的浪费。
答案 0 :(得分:6)
普通文字只需要在编译期间由编译器进行评估。
也可以在运行时评估用户定义的文字。例如,在包含<string>
标头并使其...s
文字由指令using namespace std::string_literals;
提供后,"Blah"s
是用户定义的文字类型std::string
。 "Blah"
部分由编译器在编译时进行评估。转换为std::string
,涉及动态分配,必须在运行时进行。
答案 1 :(得分:1)
但是需要评估文字的程序(例如,整数 21)对我来说没有意义。价值就在那里,多少钱 你明白了吗?
浮点类型的事情要复杂一些。考虑数字0.1
。在二进制中,它无法准确表示,必须为其选择最接近的浮点表示。如果在运行时输入该数字,则0.1
到二进制表示的转换必须遵循舍入模式(向上,向下,向零,向无穷大)。对浮点运算的严格处理表明,0.1
浮点文字到二进制表示的转换也应该遵循舍入模式(在运行时只知道),因此编译器无法完成(实际上是它的大部分可以由编译器完成,但最后的舍入必须在运行时执行,同时考虑到舍入模式。)