C++primer :const限定符
1.问题引入
<span style="font-size:18px;"><span style="font-size:18px;">for( int index =0; index != 512; ++ index){//......</span></span>
上面的for循环代码有两个问题,都和512作为循环上界有关。
<span style="font-size:18px;">int bufSize = 512; // input buffer size
for(int index = 0; index != bufSize; ++index){//......
}</span>
我们可以看出,现在是对对象bufSize测试,而不是字面值常量512测试。
2.为什么我们需要const?
<span style="font-size:18px;">const int bufSize = 512; //input buffer size</span>
定义bufSixe为常量并初始化为512.变量bufSize仍然为一个左值。但是现在这个左值是不可以修改的,修改任何的bufSize的尝试都会导致编译错误。
<span style="font-size:18px;">bufSize = 0; // error: attemp to write to const object</span>
因为常量定义后就不能被修改,所以定义时必须初始化!!!
<span style="font-size:18px;">const std::string hi = "hello";// ok:innitialized
const int i,j=0;//error:i is uninitialized const</span>
3.const对象默认为文件的局部变量
<span style="font-size:18px;">// file_1.cc
int counter; // defination
// file_2.cc
extern int counter; // uses counter from file_1
++counter; //increments counter defined in file_1</span>
与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。
<span style="font-size:18px;">// file_1.cc
// defines and initialize a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1
for(int index = 0; index != bufSize; ++ index){//......
}</span>
在上述程序中,file_1.cc通过函数fcn的返回值来定义和初始化bufSize。而bufSize又被定义为外部类型extern,这就意味着bufSize可以再其他的文件中被使用。file_2.cc中bufSize同样声明为外部类型extern;不能被初始化。
C++primer :const限定符相关推荐
- C++primer第二章2.4节对于const限定符相关内容进行详解
const限定符 const对象一旦创建后其数值就不会被再次改变,因此const对象必须初始化. const对象只在文件中有效 在不同的文件中使用不同的const来定义不同的常量,那么每个文件定义的变 ...
- 【C++学习笔记】复合类型和const限定符
一.复合类型 复合类型(compound type)是指基于其他类型定义的类型.本次主要介绍引用和指针两种. 1.1 引用 引用(reference)为对象起了另外一个名字,引用类型引用(re ...
- C++ 语法 const限定符
const限定符是常用且容易混淆的概念,很多书中讲解不清晰,甚至<C++ primer>中都有一些错误的论断或者不明确的区分,本文对const限定符做归纳总结. 一.在类型中 顶层cons ...
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
- php+条件限定符,const 限定符
const 限定符 const 对象一旦创建后不可改变,所以const必须初始化. const int i=get_size(); //运行时初始化 const int j=43; const int ...
- C++的const限定符
const限定符总是让人很头疼,下面讲解一下几个比较容易混淆的概念: 对常量的引用(常量引用): 一般情况下,引用的类型要与其所引用的对象的类型一致,其中的例外情况就是,当初始化常量引用时,允许用任意 ...
- 指针、引用以及const限定符、constexpr限定符
文章目录 复合类型 引用 概念与使用 引用的定义 注意 指针 概念 声明方式 取地址符 指针值 空指针 利用指针访问对象 赋值和指针 void* 指针 指向指针的指针 指向指针的引用 初始化所有指针 ...
- C++ const限定符和auto类型说明符
const限定符 # 1.限定常量 有时我们希望定义这样的变量:它的值不能被改变.为了满足这一要求,我们使用const对变量的类型加以限定: const int bufSize = 512; 这样就把 ...
- c++ const限定符
const限定符 const对像一旦创建,其值就不能发生改变.const对象必须初始化 const int i = get_size();//正确,运行时初始化. const int j = 1;// ...
最新文章
- python+selenium百度贴吧自动签到
- object.create()
- R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)
- 20天持续压测,告诉你云存储性能哪家更强?
- Vertical Menu ver4
- LESSON 12.1-12.6 梯度提升树的基本思想梯度提升树的参数
- 斯坦福大学机器学习第四课“逻辑回归(Logistic Regression)”
- maven 文件上传下载_使用Maven将文件上传和下载到S3
- 科研人看过来!2021腾讯AI Lab犀牛鸟专项研究计划开始申请
- MapBar和MapInfo中的比例尺[更新:MapBar比例尺是正确的]
- 10年前腾讯微信后台第一天提交的代码曝光;苹果App Store佣金抽成再做让步;TypeScript 4.1发布|极客头条...
- 《Java并发编程实践》学习笔记之二:线程安全性(thread-safe)
- Leetcode刷题95. 不同的二叉搜索树 II
- 中国计算机学会推荐国际学术会议和期刊目录(2019,最新)
- 【mcuclub】MQ系列气体传感器
- cocos2d-html5教程之重要概念
- 虹科AR智能眼镜是什么?好用吗?
- 【R语言】【1】初学R语言语法使用Rstudio编辑
- 面试题,移动端APP测试常见bug记录
- Qt: Linux下生成.xlsx文件(excel表格文件)