像“2*7”这样的操作被认为是文字吗?
Are operations like `2*7` considered literals?
我只是有一个小问题。
操作是否被视为文字?例如,2*7
会是文字吗? "hello, " + "world!"
是文字吗?
我知道操作数是文字,但表达式不是明确的 14
或 "hello, world!"
。
问题2+3算文字吗?
基本上问我在问什么,但大多数答案甚至没有帮助,他们所做的只是分解变量声明或谈论编译器如何处理它们,但我不是在寻找那个,所以我会喜欢更深入的解释。
谢谢
这取决于语言和编译器,抱歉。但是仅仅使用文字是一种标记的概念,那么不,结果是编译时常量,而不是标记。
在 C/C++ 中,2*7 将被编译器优化为一个新常量,但它实际上并没有被合法地定义为文字,尽管它可以被视为编译时常量.
连接"hello" "world"
(注意没有加号)在c++中实际上被描述为一个预处理步骤,所以确实生成了一个新的文字常量字符串,但是在原始的C中这不起作用。
但请注意,在 C 中,宏会将参数短语 2+7
视为单独的标记,而 #define STUPIDMUL3(val) 3 * val
对于 2+7
将给出答案 13,而不是 18。如果您可以找到一种方法来强制宏以不同方式处理字符串的两半,我认为它会。
我希望解释器处理 2*7 比处理 14 花费更长的时间,因为它可能每次都解释并解决它。
我只是有一个小问题。
操作是否被视为文字?例如,2*7
会是文字吗? "hello, " + "world!"
是文字吗?
我知道操作数是文字,但表达式不是明确的 14
或 "hello, world!"
。
问题2+3算文字吗? 基本上问我在问什么,但大多数答案甚至没有帮助,他们所做的只是分解变量声明或谈论编译器如何处理它们,但我不是在寻找那个,所以我会喜欢更深入的解释。
谢谢
这取决于语言和编译器,抱歉。但是仅仅使用文字是一种标记的概念,那么不,结果是编译时常量,而不是标记。
在 C/C++ 中,2*7 将被编译器优化为一个新常量,但它实际上并没有被合法地定义为文字,尽管它可以被视为编译时常量.
连接"hello" "world"
(注意没有加号)在c++中实际上被描述为一个预处理步骤,所以确实生成了一个新的文字常量字符串,但是在原始的C中这不起作用。
但请注意,在 C 中,宏会将参数短语 2+7
视为单独的标记,而 #define STUPIDMUL3(val) 3 * val
对于 2+7
将给出答案 13,而不是 18。如果您可以找到一种方法来强制宏以不同方式处理字符串的两半,我认为它会。
我希望解释器处理 2*7 比处理 14 花费更长的时间,因为它可能每次都解释并解决它。