下面的陈述是什么意思

  • 本文关键字:是什么 陈述 c++
  • 更新时间 :
  • 英文 :


我正在进行C++引物,在第2行中我感到困惑

const int ci = 42;    // we cannot change ci; const is top-leve
int i = ci;           // ok: when we copy ci, its top-level const is ignore

根据我的说法,我们将ci定义为常数。然后我们简单地将其复制到"i"中

  1. ;忽略顶级常量";进入画面?

  2. 有人能解释一下top和amp;低级常量?

存储在定义为const int ci的变量中的值在其整个生命周期内保持不变。这意味着您不能在未来的代码行中更改其值。(例如,您以后无法编写ci = 43;,编译器将强制执行const,并且不允许生成此代码。(

但是,当将其值复制到int i时,您创建了一个名为i的新变量。而i并没有被定义为const,所以它就是我们所说的可变,这意味着后面的代码可以更改它的值。

顶级术语被一些人使用,并且是从脚本语言中拖进来的。我看到它在一些C++引物中使用,意思是";对象本身是const";而const int* p将是低级常量,即引用的对象是常量。

const int* p;   // low-level const, a pointer to a const 
int* const p = &i;   // top-level const, pointer is const

这个术语没有正式定义,也许应该避免使用,因为它会造成混乱。

const int* const p = &ci; // top-level and low-level?

默认情况下,C++创建并操作可变数据,因此这些术语几乎没有价值。如果用const对象初始化一个非const对象,则新副本是可变的,除非这是一个类类型,并且在用户定义的构造函数中存在有意的代码。除非声明,否则创建的对象仍然不会是const。此外,C++喜欢const_cast转换的存在,这将是对Clojure等语言的冒犯。

最新更新