我一直以为l-value需要评估,但原因很明显且容易解释。标识符表示存储区域,值在该存储区域中并必须检索。这是有道理的。但是,程序需要评估字面量(例如整数21)对我来说并不太合理。值就在那里,你还能更明确些吗?除了添加U来表示无符号或其他后缀外。这就是为什么我对需要评估字面量感到好奇,因为我只在一个地方看到过这个提到。大多数书籍也会切换术语,如“主要表达式”,“操作数”或“子表达式”等,这使得界限变得模糊。在所有这些时间里,我还没有看到关于这个特定问题的清晰解释。这似乎是浪费处理能力。
我一直以为l-value需要评估,但原因很明显且容易解释。标识符表示存储区域,值在该存储区域中并必须检索。这是有道理的。但是,程序需要评估字面量(例如整数21)对我来说并不太合理。值就在那里,你还能更明确些吗?除了添加U来表示无符号或其他后缀外。这就是为什么我对需要评估字面量感到好奇,因为我只在一个地方看到过这个提到。大多数书籍也会切换术语,如“主要表达式”,“操作数”或“子表达式”等,这使得界限变得模糊。在所有这些时间里,我还没有看到关于这个特定问题的清晰解释。这似乎是浪费处理能力。
普通字面值仅需编译器在编译时进行评估。
用户自定义字面值可能也会在运行时进行评估。例如,包含<string>
头文件,并通过指令using namespace std::string_literals;
使其...s
字面值可用后,"Blah"s
是类型为std::string
的用户自定义字面值。其中的"Blah"
部分由编译器在编译时进行评估。转换为std::string
,涉及动态分配,必须在运行时发生。