【问题标题】:Are operations like `2*7` considered literals?像“2*7”这样的操作是否被认为是文字?
【发布时间】:2019-10-18 00:08:37
【问题描述】:

我只是有一个小问题。

操作是否被视为文字?例如,2*7 会是文字吗? "hello, " + "world!" 是文字吗?

我知道操作数是文字,但表达式不是明确的14"hello, world!"

Is 2+3 considered as a literal? 的问题基本上问我在问什么,但大多数答案甚至没有帮助,他们所做的只是分解变量声明或谈论编译器对它们做了什么,但我不是在寻找那个,所以我想要更深入的解释。


谢谢

【问题讨论】:

    标签: literals


    【解决方案1】:

    这取决于语言和编译器,抱歉。但是仅仅使用文字是一种标记的概念,那么不,结果是编译时常量,而不是标记。

    在 C/C++ 中,编译器会优化 2*7 以生成一个新常量,但它实际上并未合法地定义为文字,尽管它可以被视为编译时常量。

    连接"hello" "world"(注意没有加号)实际上被描述为 c++ 中的预处理步骤,因此会生成一个新的文字常量字符串,但在原始 C 中这不起作用。

    但请注意,在 C 语言中,宏会将参数短语 2+7 视为单独的标记,#define STUPIDMUL3(val) 3 * val for 2+7 将给出答案 13,而不是 18。如果你能找到一种方法来强制宏我认为可以区别对待字符串的两半。

    我希望解释器处理 2*7 比 14 需要更长的时间,因为它可能每次都解释和解决它。

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2011-11-21
      相关资源
      最近更新 更多