常量和文字之间的混淆?
Confusion between constants and literals?
我目前正在阅读来自 TutorialsPoint 的 c++ 教程中有关常量的内容,它说:
Constants refer to fixed values that the program may not alter and they are called literals.
(Source)
我不太明白。如果常量被称为字面量,而字面量是直接在代码中表示的数据,那么常量怎么能被认为是字面量呢?我是说以const关键字开头的变量是常量,但它们不是文字,所以你怎么能说常量是文字?
这里:
const int MEANING = 42;
值 MEANING 是一个常量,42 是一个文字。这两个术语之间没有真正的关系,如下所示:
int n = 42;
其中 n
不是常量,但 42 仍然是文字。
主要区别在于常量可能在内存中有一个地址(如果您编写一些需要这样一个地址的代码),而字面值永远没有地址。
If constants are called literals and literals are data represented directly in the code, how can constants be considered as literals?
您引用的文章将一词"constant"定义为"literal"的同义词。后者是 C++ 标准的术语,用于描述它所描述的内容。前者是 C 标准用于相同概念的内容。
I mean variables preceded with the const keyword are constants, but they are not literals, so how can you say that constants are literals?
您在此处为术语 "constant" 提供了另一种定义,您是对的,但与其他定义不一致。就这样。 TP 使用的术语定义与您习惯的定义不同。
事实上,尽管 "constant" 的名词用法出现在定义术语 "null pointer constant" 之外的 C++ 标准中的几个地方,显然具有您在此处提出的含义,但我没有找到该术语的实际定义,尤其是与您的定义不匹配的定义。实际上,您的定义不如 TutorialPoint 的合理,因为具有 const
限定类型的表达式仍然可以指定一个可修改的对象(通过不同的表达式)。
虽然声明的第一部分是有道理的
Constants refer to fixed values that the program may not alter
延续
and they are called literals
不是真的。
Neil 已经在 中解释了文字和常量之间的语义差异。但我还要补充一点,C++中常量变量的值不一定在编译时就知道。
// x might be obtained at runtime
// for instance, from the user input
void print_square(int x)
{
const int square = x*x;
std::cout << square << '\n';
}
文字是在编译时已知的值,这允许编译器将它们放入生成的二进制文件中的单独的只读地址 space。
您还可以通过应用 constexpr 关键字 (C++11) 强制在编译时知道您的变量。
constexpr int meaning = 42;
P.S。我也同意 建议使用一本好书而不是 tutorialspoint。
Constant 只是一个通过关键字 'const' 声明为常量的变量,声明后的值在程序运行期间不应更改(如果试图更改它将导致错误)。
另一方面,字面量只是在输入时使用和表示的内容。例如,在表达式 (x+4*y+25) 中使用 25 时将被称为字面量。
每当我们使用字符串值或直接用双引号 ("hello") 提供它时,双引号中的值称为文字。
例如,printf("This is literal");
如果您将一个字符串值赋给一个变量,那么此后您将引用该变量(如果需要,可以将其声明为常量),而不是只引用您存储在其中的值,即,直到当您向变量提供一个值(任何其他类型的字符串类型)时,该值称为文字值,之后每当引用该值时都会讨论该变量。
再一次,表达式 : x+4*y+25 中的值 (25) 是字面值。
术语 4*y 中的值 (4) 也是文字(因为它与我们看到的完全一样,并且事先为编译器所知)。
--> 4*y项中的值(4)在代数术语中称为数值系数,y在代数术语中称为文字系数
因此,
我给出的所有上述解释仅是计算机术语。代数中文字和常量的含义与计算机术语中的含义有所不同。
这篇文章的作者感到困惑,并将这种困惑传播给其他人(包括您)。
在 C 中,文字是 "constants"。在 C 中最初没有一个叫做 const
的东西,所以这很好。
C++ 是一种不同的语言。在 C++ 中,文字称为 "literals","constant" 有一些含义,但通常是 a const
thing。这两个概念是不同的(虽然这两种东西在初始创建后都不能变异)。我们还通过 constexpr
获得编译时常量,这是另一回事。
总的来说,看一本好书,而不是网上随机乱写的教程!
我不同意“...最初在 C 中没有称为 const 的东西,所以这很好。” const 实际上是 32 个 C 关键字之一。 Google 看看。
有了这个休息,我认为这个人在 TP 错过了一些东西。为了公平起见,在 Tutorials Point,他们有一篇文章解释了这种差异(完整引用,逐字记录):
https://www.tutorialspoint.com/questions/category/Cplusplus
文字是表示为自身的值。例如,数字 25 或字符串 "Hello World" 都是文字。
常量是一种替代文字的数据类型。当在程序中多次使用特定的不变值时,将使用常量。例如,如果您有一个名为 PI 的常量,您将在程序的不同位置使用它来计算圆的面积、周长等,那么这是一个常量,因为您将重复使用它的值。但是当你将它声明为:
const float PI = 3.141;
3.141 是您正在使用的文字。它没有自己的内存地址,只是位于源代码中。
请不要贬低那些做你所谓的人"random tutorials"。来自贫困家庭和欠发达国家的孩子买不起你的“好的 C++ 教科书”,例如Scott Myers Effective C++ 他们可以拥有这些在线免费教程,并且这些教程中的大多数比 "good books" 解释得更好。
无论如何,请阅读他们。感到困惑,然后过来 StackOveflow 或 Quora 来消除你的困惑。快乐的编码家伙。
"Constants refer to fixed values that the program may not alter and they are called literals. (Source)"
句子结构怪异,导致混乱。
这里,"they" 指的是固定值而不是常量。我会将其表述为 "Constants refer to fixed values, that the program may not alter, called literals.",我希望这样不会造成混淆。
常量是不能变化的变量,而字面量 numbers/letters 表示变量或常量的值。
我可以这样解释。
基本上,常量是其值不能改变的变量。
文字是表示固定值的符号。这些值可以是字符串数字等
可以将文字赋值给变量
代码:
var a = 10;
var name = "Simba";
const pi = 3.14;
这里a和name是变量。 pi 是常数。 (常量是那些值不会改变的变量。)
这里10,"辛巴"和3.14都是字面量
我目前正在阅读来自 TutorialsPoint 的 c++ 教程中有关常量的内容,它说:
Constants refer to fixed values that the program may not alter and they are called literals. (Source)
我不太明白。如果常量被称为字面量,而字面量是直接在代码中表示的数据,那么常量怎么能被认为是字面量呢?我是说以const关键字开头的变量是常量,但它们不是文字,所以你怎么能说常量是文字?
这里:
const int MEANING = 42;
值 MEANING 是一个常量,42 是一个文字。这两个术语之间没有真正的关系,如下所示:
int n = 42;
其中 n
不是常量,但 42 仍然是文字。
主要区别在于常量可能在内存中有一个地址(如果您编写一些需要这样一个地址的代码),而字面值永远没有地址。
If constants are called literals and literals are data represented directly in the code, how can constants be considered as literals?
您引用的文章将一词"constant"定义为"literal"的同义词。后者是 C++ 标准的术语,用于描述它所描述的内容。前者是 C 标准用于相同概念的内容。
I mean variables preceded with the const keyword are constants, but they are not literals, so how can you say that constants are literals?
您在此处为术语 "constant" 提供了另一种定义,您是对的,但与其他定义不一致。就这样。 TP 使用的术语定义与您习惯的定义不同。
事实上,尽管 "constant" 的名词用法出现在定义术语 "null pointer constant" 之外的 C++ 标准中的几个地方,显然具有您在此处提出的含义,但我没有找到该术语的实际定义,尤其是与您的定义不匹配的定义。实际上,您的定义不如 TutorialPoint 的合理,因为具有 const
限定类型的表达式仍然可以指定一个可修改的对象(通过不同的表达式)。
虽然声明的第一部分是有道理的
Constants refer to fixed values that the program may not alter
延续
and they are called literals
不是真的。
Neil 已经在
// x might be obtained at runtime
// for instance, from the user input
void print_square(int x)
{
const int square = x*x;
std::cout << square << '\n';
}
文字是在编译时已知的值,这允许编译器将它们放入生成的二进制文件中的单独的只读地址 space。 您还可以通过应用 constexpr 关键字 (C++11) 强制在编译时知道您的变量。
constexpr int meaning = 42;
P.S。我也同意
Constant 只是一个通过关键字 'const' 声明为常量的变量,声明后的值在程序运行期间不应更改(如果试图更改它将导致错误)。
另一方面,字面量只是在输入时使用和表示的内容。例如,在表达式 (x+4*y+25) 中使用 25 时将被称为字面量。
每当我们使用字符串值或直接用双引号 ("hello") 提供它时,双引号中的值称为文字。 例如,printf("This is literal");
如果您将一个字符串值赋给一个变量,那么此后您将引用该变量(如果需要,可以将其声明为常量),而不是只引用您存储在其中的值,即,直到当您向变量提供一个值(任何其他类型的字符串类型)时,该值称为文字值,之后每当引用该值时都会讨论该变量。
再一次,表达式 : x+4*y+25 中的值 (25) 是字面值。 术语 4*y 中的值 (4) 也是文字(因为它与我们看到的完全一样,并且事先为编译器所知)。
--> 4*y项中的值(4)在代数术语中称为数值系数,y在代数术语中称为文字系数
因此, 我给出的所有上述解释仅是计算机术语。代数中文字和常量的含义与计算机术语中的含义有所不同。
这篇文章的作者感到困惑,并将这种困惑传播给其他人(包括您)。
在 C 中,文字是 "constants"。在 C 中最初没有一个叫做 const
的东西,所以这很好。
C++ 是一种不同的语言。在 C++ 中,文字称为 "literals","constant" 有一些含义,但通常是 a const
thing。这两个概念是不同的(虽然这两种东西在初始创建后都不能变异)。我们还通过 constexpr
获得编译时常量,这是另一回事。
总的来说,看一本好书,而不是网上随机乱写的教程!
我不同意“...最初在 C 中没有称为 const 的东西,所以这很好。” const 实际上是 32 个 C 关键字之一。 Google 看看。 有了这个休息,我认为这个人在 TP 错过了一些东西。为了公平起见,在 Tutorials Point,他们有一篇文章解释了这种差异(完整引用,逐字记录): https://www.tutorialspoint.com/questions/category/Cplusplus
文字是表示为自身的值。例如,数字 25 或字符串 "Hello World" 都是文字。
常量是一种替代文字的数据类型。当在程序中多次使用特定的不变值时,将使用常量。例如,如果您有一个名为 PI 的常量,您将在程序的不同位置使用它来计算圆的面积、周长等,那么这是一个常量,因为您将重复使用它的值。但是当你将它声明为:
const float PI = 3.141;
3.141 是您正在使用的文字。它没有自己的内存地址,只是位于源代码中。
请不要贬低那些做你所谓的人"random tutorials"。来自贫困家庭和欠发达国家的孩子买不起你的“好的 C++ 教科书”,例如Scott Myers Effective C++ 他们可以拥有这些在线免费教程,并且这些教程中的大多数比 "good books" 解释得更好。 无论如何,请阅读他们。感到困惑,然后过来 StackOveflow 或 Quora 来消除你的困惑。快乐的编码家伙。
"Constants refer to fixed values that the program may not alter and they are called literals. (Source)"
句子结构怪异,导致混乱。 这里,"they" 指的是固定值而不是常量。我会将其表述为 "Constants refer to fixed values, that the program may not alter, called literals.",我希望这样不会造成混淆。 常量是不能变化的变量,而字面量 numbers/letters 表示变量或常量的值。
我可以这样解释。
基本上,常量是其值不能改变的变量。
文字是表示固定值的符号。这些值可以是字符串数字等
可以将文字赋值给变量
代码:
var a = 10;
var name = "Simba";
const pi = 3.14;
这里a和name是变量。 pi 是常数。 (常量是那些值不会改变的变量。)
这里10,"辛巴"和3.14都是字面量