长 x = 32L 和长 const x = 32 有什么区别

What is the difference between long x = 32L and long const x = 32?

本文关键字:什么 区别 和长 32L const      更新时间:2023-10-16

我浏览了一本C++书,我得到了这样的语句long x = 32L并给出了l or L suffix on an integer means the integer is a type long constant语句;但是当我检查使用编译器作为long x = 32L ; cout<<x; x = 45 ; cout<<x ;时,没有错误或警告,那么这里的常量是什么意思?长常量 x = 32; ?

32L是否const并不重要;当你写long x = 32L;时,x是一个变量,其值是从32复制的。 x当然不是const. 当您更改x时,您不会更改文字32;您将一个新值放入变量 x 的存储中。

C++中3232L的技术术语是字面意思。然而,人们有时称它们为"常量"。 这有点令人困惑,因为它与关键字const的作用无关。

3232L之间的唯一区别是,一个是int,另一个是long

我想

你对L的用途感到困惑。考虑一个具有 32 位int和 64 位long的平台:

unsigned long i = 0xffffffff << 16;

这将设置:i <- 0xffff0000,因为0xffffffff隐式是一个整数值,并且相应地计算右侧的表达式。另一方面

unsigned long i = 0xffffffffUL << 16;

yields: i <- ffffffff0000 ,因为表达式被计算为无符号长整型。

为了使变量是常量,它应该伴随着 const 关键字。

例如:

const int a = 5;
a = 6; // error 

现在你所拥有的是,你分配一个常量值,即变量中的 32。常量转到值,而不是变量。

例如,您可以执行以下操作:

a = 32L;

因此,您分配给变量 a 的值是一个常量,32L .

如果你这样做了

for(int i = 0; i < 5; ++i)
   a = i;

则分配给变量 a 的值不是常量。

强烈建议你看看我关于32之后L的相对问题。

What is the difference between long x = 32L and long const x = 32 ?

不同之处在于,在第一个中,您可以x新值分配变量,而在第二个中则不能。

你对这些术语感到困惑。

根据这一说法:

int x = 32; 
x 是 int 类型的

变量,32 是 int 类型的文本。

你永远不能做 32 = 35 ,但你可以做 x = 35,因为 x 不是一个常数。

根据另一个声明:

const long y = 32L;

这意味着 ylong 类型的常量,无法更改。此外,32Llong 类型的文字,也无法更改。

你永远不能做 y = 35L,因为 y 是一个常数,它的值已经设置好了。

而且,就像@MattMcNabb悲伤一样:

"32L

和32L之间的唯一区别是,一个是int,另一个是长。

dr:是的,你是对的。


这本书称它为"常数",但它是错误的;正确的术语是"字面意思"。

没有办法修改文字本身(这可能就是本书作者使用这个术语的原因(,但是,一旦你使用文字来初始化long int xx可以修改,因为它不是const

你是对的,long int const x将是使最终"变量"实际上是一个常量的方法。