常量和文字之间的混淆?

时间:2017-06-26 19:32:35

标签: c++ constants literals

我目前正在阅读来自TutorialsPoint的c ++教程的常量,并在其中说:

  

常量指的是程序可能不会改变的固定值,它们被称为文字。   (Source

我真的不明白。如果常量被称为文字,文字是直接在代码中表示的数据,那么常量如何被视为文字?我的意思是以const关键字开头的变量是常量,但它们不是文字,所以你怎么能说常量是文字?

8 个答案:

答案 0 :(得分:3)

下面:

 const int MEANING = 42;

值MEANING是常量,42是字面值。这两个术语之间没有真正的关系,如下所示:

 int n = 42;

其中n不是常量,但42仍然是文字。

主要区别在于常量可能在内存中有一个地址(如果你编写了一些需要这样一个地址的代码),而文字从来没有地址。

答案 1 :(得分:3)

虽然声明的第一部分有意义

  

常量是指程序可能不会改变的固定值

延续

  

它们被称为文字

不是真的。

Neil已经在his answer中解释了文字和常量之间的语义差异。但我还要补充一点,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';
}

字面值是在编译时已知的值,它允许编译器将它们放在生成的二进制文件中的单独的只读地址空间中。 您还可以通过应用constexpr关键字(C ++ 11)来强制在编译时知道变量。

constexpr int meaning = 42;

P.S。而且我也同意a comment建议使用一本好书而不是教学点。

答案 2 :(得分:2)

  

如果常量被称为文字,文字是直接在代码中表示的数据,那么如何将常量视为文字?

您从中提取引文的文章是定义单词“constant”作为“literal”的同义词。后者是C ++标准的术语,用于描述它。前者是C标准用于相同概念的内容。

  

我的意思是以const关键字开头的变量是常量,但它们不是文字,所以你怎么能说常量是文字?

在那里,你为“常数”这个术语提供了一个替代定义,你是对的,与另一个不一致。就这样。 TP使用的术语定义与您习惯使用的定义不同。

事实上,虽然“常量”的名词用法出现在C ++标准的几个地方,在定义的术语“空指针常量”之外,显然具有你在这里提出的含义,但我找不到实际的定义那个词,特别是不匹配你的那个词。事实上,你的定义不像TutorialPoint那样合理,因为具有const - 限定类型的表达式可以指定一个可修改的对象(通过不同的表达式)。

答案 3 :(得分:0)

常量只是一个用关键字'const'声明为常量的变量,声明后的值在程序执行过程中不应更改(并且如果尝试对其进行更改,将导致错误)。

另一方面,文字只是键入时使用和表示的文字。例如,在表达式(x + 4 * y + 25)中使用25时,它将被称为文字。

每当我们使用String值或直接在双引号中提供它(“ hello”)时,则将双引号中的值称为文字。 例如,printf(“ This isliteral”);

如果要为变量分配字符串值,则此后将引用该变量(如果需要,可以将其声明为常量),而不是仅引用存储在其中的值,即仅直到向变量提供值(任何其他类型的字符串类型)时,该值称为文字值,此后在每次引用该值时都会讨论该变量。

再次,表达式:x + 4 * y + 25中的value(25)是立即数。 术语4 * y中的value(4)也是一个文字(因为它完全如我们所见,并且是编译器事先知道的。)

->术语4 * y中的值(4)用代数术语称为数值系数,而y则用代数术语称为文字系数。

因此, 我给出的所有上述解释仅是计算机术语。代数中常量和常量的含义与计算机术语中的有所不同。

答案 4 :(得分:0)

文章的作者感到困惑,并将这种困惑传播给其他人(包括您)。

在C中,文字是“常量”。最初在C中没有一个叫做const的东西,所以很好。

C ++是另一种语言。在C ++中,文字被称为“文字”,“常量”具有一些含义,但通常是 const事物。这两个概念是不同的(尽管在初始创建后这两种东西都无法更改)。我们还通过constexpr获得了编译时常量,这是另一回事。

通常,要读一本好书,而不要读互联网上随机读者写的随机教程!

答案 5 :(得分:0)

我不同意这样的说法:“ ...最初在C中没有所谓的const,所以这很好。” const实际上是32个C关键字之一。谷歌看。 休息了一下,我认为那人在TP上错过了一些东西。为了在Tutorials Point上对他们公平起见,他们有一篇文章对此进行了解释(完整引用,逐字逐句): https://www.tutorialspoint.com/questions/category/Cplusplus

文字是表示为自身的值。例如,数字25或字符串“ Hello World”都是文字。

常量是替代文字的数据类型。当在程序中多次使用特定的不变值时,将使用常量。例如,如果您有一个名为PI的常量,将在程序的各个位置使用它来查找圆的面积,周长等,则这是一个常量,因为您将重用其值。但是当您将其声明为:

const float PI = 3.141;

3.141是您正在使用的文字。它本身没有任何内存地址,仅位于源代码中。

请不要轻视那些做您所谓的“随机教程”的人。来自较贫穷家庭和欠发达国家的孩子买不起您的“优质C ++教科书”,例如Scott Myers Effective C ++这是他们可以拥有的这些在线免费教程,并且其中大多数教程都比“好书”有更好的解释。 无论如何,请阅读他们。弄糊涂了,然后过来这里到StackOveflow或Quora,以消除您的困惑。快乐的编码家伙。

答案 6 :(得分:0)

“常量是指程序可能不会更改的固定值,它们被称为文字。(源)”

句子结构很奇怪,导致混乱。 在此,所指的“ they”是固定值而不是常数。我将其表述为“常量指的是固定值,程序不能更改,称为文字”。我希望这不会造成混乱。 常量是不能改变的变量,而字面量实际上是表示变量或常量值的数字/字母。

答案 7 :(得分:0)

我可以这样解释。

  • 基本上,常量是其值无法更改的变量。

  • 文字是表示固定值的符号。这些值可以是字符串数字等

  • 可以将文本分配给变量

代码:

var a = 10;
var name = "Simba";
const pi = 3.14;

此处 a 名称是变量。 pi 是一个常数。 (常量是其值不变的变量。)

此处 10 ,“ Simba ”和 3.14 是文字。