c++中的字面量真的会求值吗?
Do literals in C++ really evaluate?
我一直认为l值必须求值,但出于某种明显且易于解释的原因。标识符表示存储区域,该值位于该存储区域中,必须检索。这说得通。但是一个需要计算字面量(例如,整数21)的程序对我来说不是很有意义。值就在这里,你还能再明确多少呢?除了加上U表示unsigned,或者其他后缀。这就是为什么我对需要评估的字面量感到好奇,因为我只在一个地方看到过这一点。大多数书籍还会调换术语,如"主表达式"、"操作数"或"子表达式"等,以至于界线开始模糊。这么长时间以来,我还没有看到对这件事有一个明确的解释。这似乎是在浪费处理能力。
普通文字只需要在编译时由编译器计算。
用户定义的文字也可以在运行时求值。例如,在包含<string>
头,并使其...s
字面值由指令using namespace std::string_literals;
可用之后,则"Blah"s
是类型为std::string
的用户定义字面值。"Blah"
部分在编译时由编译器求值。到std::string
的转换涉及到动态分配,必须在运行时进行。
但是一个程序需要计算一个字面值(例如,整数)我不太明白。值在这里,是多少你还能说得更清楚吗?
对于浮点类型,情况稍微复杂一些。考虑数字0.1
。在二进制中,它不能精确地表示,必须为它选择最接近的浮点表示。如果在运行时输入该数字,则0.1
到二进制表示的转换必须遵循舍入模式(向上、向下、向零、向无穷大)。对浮点运算的严格处理表明,0.1
浮点文字到二进制表示的转换也应该按照舍入模式执行(这只在运行时才知道),因此不能由编译器完成(实际上它的大部分可以由编译器完成,但最后的舍入必须在运行时执行,考虑到舍入模式)。
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 字节真的是最小可寻址单元吗
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- std::string 的对象真的可以移动吗?
- 在这种情况下,我真的复制了字节还是复制了字符?
- int8_t和uint8_t真的是整数吗?它们有什么用?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 查找不等式为真的次数时出现问题
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 在为嵌套类定义行外友元时,我真的必须打破封装吗?
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- "std::forward"和"std::move"真的不生成代码吗?
- VS 2017 和 2019 运行 c++ 真的很慢
- 结构和类在C++中真的等价吗?
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 运算符重载是否真的需要返回值C++?
- 我想使用 "cout" 命令慢慢打印文本,但我真的找不到任何解决方案
- " sizeof "操作员在编程中真的很重要吗,尤其是在构建大型应用程序时?