为什么
一个八进制字面量?我以为所有的八进制字面量都必须以0开头,但这个字面量没有,因为它以负号开头。
我知道这只是一个小问题,但它让我非常困惑!
n
在这里?const int n = -0123;
一个八进制字面量?我以为所有的八进制字面量都必须以0开头,但这个字面量没有,因为它以负号开头。
我知道这只是一个小问题,但它让我非常困惑!
八进制字面量如何可能为负数?
没有负的整数字面量,只有正数。这里的字面量是0123,它以0开头,因此是八进制。-
在表达式中是一元减号运算符。
这是完全正确的。然而,所有整数字面量(十进制、十六进制、八进制和二进制)同样适用。实际上,没有负整数字面量。例如,表达式-1
将一元减号运算符应用于字面量所代表的值,这可能涉及隐式类型转换(参考)。
您似乎对字面值有点困惑,因此:
简而言之,字面值是一种描述在代码中可以被直接看到的类型的方式。当您在代码中写入一个整数时,例如4
,您可以直接看到它是数字四,除非它们后面有一个点(.
)或任何其他有效的后缀,否则默认情况下将其解释为int
。
4u
来告诉编译器将其解释为无符号数。现在,你可以看到它是数字4被解释为无符号数。同样,值"Hello World"
是一个字符串字面量,因为你可以在代码中看到它是字符串"Hello World"
。另一方面,用户定义的类Person
没有在代码中以字面量方式出现的方法。在C++14中,你可以定义用户定义的字面量,但对于Person
来说,这仍然没有意义。标准库在<chrono>
头文件中使用这个功能,定义了如s
、ms
和ns
等表示秒、毫秒和纳秒的字面量。-0123
时,你告诉编译器以八进制值的方式解释它,就像0xFF
以十六进制的方式直接解释一样。减号-
只是一种将一元负号运算符应用于数字0123
的方法。
-
是否是字面量的一部分? - Sotirios Delimanolis-0123
以零开头。同样,您可以使用-0xFF
表示-255和-0b010
表示-2。 - Carl0123
,而你对其应用了一元的-
操作符。 - Sotirios Delimanolis