长 x = 32L 和长 const x = 32 有什么区别
What is the difference between long x = 32L and long const x = 32?
我浏览了一本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++中32
或32L
的技术术语是字面意思。然而,人们有时称它们为"常量"。 这有点令人困惑,因为它与关键字const
的作用无关。
32
和32L
之间的唯一区别是,一个是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;
这意味着 y 是 long 类型的常量,无法更改。此外,32L 是 long 类型的文字,也无法更改。
你永远不能做 y = 35L,因为 y 是一个常数,它的值已经设置好了。
而且,就像@MattMcNabb悲伤一样:
"32L和32L之间的唯一区别是,一个是int,另一个是长。
dr:是的,你是对的。
这本书称它为"常数",但它是错误的;正确的术语是"字面意思"。
没有办法修改文字本身(这可能就是本书作者使用这个术语的原因(,但是,一旦你使用文字来初始化long int x
,x
可以修改,因为它不是const
。
你是对的,long int const x
将是使最终"变量"实际上是一个常量的方法。
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::enable_if 和 std::enable_if_t 有什么区别?