`
isiqi
  • 浏览: 16498920 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Thinking in C++ 学习笔记(1) 类中的const

阅读更多

Thinking in C++ 学习笔记 类中的const

1. 类里的const

1)在一个类里,const意味着“在这个对象生命周期内,它是一个常量”。

2)在一个类里建立一个普通的(非staticconst时,不能给它初值,初始化工作必须在构造函数的初始化列表里进行。初始化列表发生在构造函数的任何代码运行前,这(初始化列表)是初始化所有const的地方。

3)因为在类对象里进行存储空间的分配,编译器不知道const成员的内容是什么,所以不能把它用作编译期间的常量.

可以认为内部类型有一个构造函数。比如 int data(10);

2. 编译期间的常量

类中使用const不能使类具有编译期间的常量。解决办法是引入static,它意味着“不管类被创建多少次,都只有一个实例”。一个内部类型的static const可以被看做一个编译期间的常量。

旧代码中的“enum hack”

旧版本的c++中不支持static const ,解决办法是使用不带实例的无标记enum(通常称为“enum hack”)。一个枚举编译期间必须有值,它在类中局部出现,而且它的值对于常量表达式是可以用的,如:

Class Bunch{

Enum { size = 100 };//这里使用的enum保证不占用对象的存储空间。

Int i[size];

};

3. const对象和成员函数

1)把一个对象声明为const其数据成员在它的生命期间不可被改变。

如果声明一个成员函数为const,则该成员函数不能改变数据成员,可以为const对象所调用。编译器不允许const对象调用非const成员函数,因为它可以改变数据成员。

2)编译器强迫程序员定义const成员函数时重申const,否则编译器把它看成一个不同的函数。

const成员函数可以被相同参数表的非const成员函数重载。例如:

class Screen{

public: char get(int x,int y);

char get(int x,int y) const

};

3)不修改数据成员的热播和函数都应该把它们声明为const

构造函数和析构函数都不是const,因为它们总是对对象做些修改。

4. 按位const(bitwise const)和按逻辑const(logical const).

(1),按位const:对象中的每个位是固定的,所以对象的每个位的映像从不改变。对应方法:强制转换const ((y*)this)->j++; 或者 const_cast<Y*>(this)->i++;

(2),按逻辑(有时也成按成员)const:虽然整个对象从概念上讲是不变的,但是某个成员可能改变。对应方法:mutable int j;

关键字mutable指定一个特定的数据成员可以在一个const对象里改变。

总结:c中的const被认为是一个不能改变的变量,而不是一个编译期间的常量。C++中的const首先意味着一个“编译期间的常量”,因为它甚至可能没有分配存储空间。

Volatile

Volatileconst的用法一样,它的意思是“编译器认识的范围外,这个数据可以被改变”。

const一样,可以对数据成员、成员函数和对象本身调用volatile,可以对volatile对象调用volatile成员函数。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

  1). 并行设备的硬件寄存器(如:状态寄存器)

  2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

  3). 多线程应用中被几个任务共享的变量

分享到:
评论

相关推荐

    Thinking in C++ Introduction to Standard C++, Volume One

    根据提供的文件信息,我们可以从《Thinking in C++:Introduction to Standard C++, Volume One》这本书中提炼出以下几个重要的知识点: ### 一、书籍简介 - **书名**:《Thinking in C++:Introduction to ...

    Thinking in C++高清版

    7.4.1 类里的const和enum 133 7.4.2 编译期间类里的常量 134 7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷...

    c++学习笔记.pdf

    C++是一种静态类型、编译式、通用的编程语言,它支持过程化编程、面向对象编程和泛型编程。C++广泛应用于软件开发领域,包括操作...以上内容覆盖了C++语言中一些基础知识点,对于学习和理解C++编程具有重要的指导意义。

    Thinking in C++ (中文版,英文版)压缩包

    《Thinking in C++》是一本深受程序员...通过《Thinking in C++》的学习,读者不仅可以掌握C++的基本语法,还能了解到C++的高级特性和面向对象编程的精髓,从而在实际项目中更好地运用C++这一强大而灵活的编程语言。

    C++编程思想(Thinking in c++)

    1. **面向对象编程**:理解类、对象、封装、继承和多态的基本概念。 2. **C++语法**:掌握变量、运算符、流程控制语句、函数和指针的用法。 3. **引用和const**:了解引用作为安全的别名以及const关键字的作用。 4. ...

    C++经典系列 Thinking in C++

    《Thinking in C++》是C++编程领域的一部经典著作,它为学习和精通C++语言提供了深入的理解和指导。本书通过丰富的实例和详尽的解释,帮助读者建立起坚实的C++编程基础,并引导他们向专家级别的水平迈进。 在...

    C++中const用法全解

    C++ 中 const 用法全解 const 在 C++ 中占有重要作用,属于小兵立大功的典型,本文档详细介绍了如何使用 const。 1. const 常量 在 C++ 中,const 可以用来修饰变量,称为常量。例如:const int max = 100; 这种...

    Advanced c++ effective c++ essential c++ thinking in c++

    在C++编程领域,"Advanced c++ effective c++ essential c++ thinking in c++" 这些书籍被视为进阶程序员的必读经典。它们涵盖了C++语言的深度理解、最佳实践和设计模式,对于提升编程技能至关重要。以下是这些书籍...

    Thinking C++ 中文版

    除了上述内容,书中还会涵盖一些高级主题,如命名空间、内联函数、运算符重载、虚函数和抽象类、静态成员、const和引用等,这些都对编写高质量的C++代码至关重要。 通过阅读《Thinking in C++》中文版,读者不仅...

    C++整理笔记word版——01 C++学习笔记

    1. **空头程序**:C++中的空头程序是一个没有实际操作的简单程序,通常用于测试编译环境。例如: ```cpp int main() { return 0; } ``` 2. **Hello World**:这是学习任何编程语言的第一步。在C++中,"Hello,...

    Thinking in C++ 2nd edition Volume 1

    通过上述分析可以看出,《Thinking in C++》第二版第一卷不仅是一本介绍C++基础知识的好书,更是深入学习标准库和高级特性的重要资源。无论是对于初学者还是有一定基础的程序员来说,这本书都能够提供极大的帮助。

    C++中的const限定修饰符

    ### C++中的const限定修饰符 #### 一、引言 在C++编程语言中,`const`关键字是一个非常重要的特性,它可以帮助开发者确保某些数据或对象在其生命周期内的不变性,从而提高代码的安全性和可维护性。本文将详细介绍`...

    Thinking in C++ v1 and v2

    总的来说,《Thinking in C++》系列教程全面覆盖了C++语言的基础和高级主题,是学习C++不可或缺的资源。通过深入阅读并实践书中的例子,读者可以建立起坚实的语言基础,并掌握面向对象编程的精髓。

    c++中const关键字使用详解

    C++语言中的const关键字是一个非常重要的修饰符,它的核心作用是声明一个变量为常量,即不可修改。正确地理解和使用const,可以帮助提高程序的健壮性和安全性。本文将详细介绍const关键字在C++中的使用方法。 一、...

    Thinking in c++(c++编程思想)

    《Thinking in C++》是C++编程领域的一部经典之作,由Bruce Eckel撰写,旨在帮助程序员深入理解和掌握...通过学习《Thinking in C++》,你可以深化对C++的理解,提高编程效率,同时也能更好地适应现代软件开发的需求。

    谭浩强C++学习笔记(1-6章)

    《谭浩强C++学习笔记(1-6章)》主要涵盖了C++语言的基础知识,包括数据类型、运算符和表达式。以下是这些章节的主要内容: 1. **数据类型**: - `char` 类型有两种,有符号和无符号。无符号 `char` 范围是 0 到 ...

    C++学习笔记1

    在本篇C++学习笔记中,我们将聚焦于使用const修饰符定义常量这一主题,以及它与指针的结合使用,还有内联函数的概念。 在C语言中,我们通常使用`#define`预处理器来定义常量,例如`#define LIMIT 100`。然而,这种...

    Thinking in C++英文版

    学习《Thinking in C++》不仅可以帮助你掌握C++语言本身,还能培养良好的编程习惯和设计思维,为后续的软件开发打下坚实基础。这本书特别适合有一定编程基础,希望通过C++来深化对编程理解的读者。在阅读过程中,...

    C++学习笔记

    1. **抽象**:将现实世界中的概念抽象成计算机程序中的类或接口。 2. **封装**:将数据和操作这些数据的方法绑定在一起,隐藏对象的内部细节,只对外提供公共接口。 3. **继承**:子类可以从父类那里继承属性和行为...

    c++primer 学习笔记

    这篇学习笔记主要涉及了C++编程的一些核心概念,包括程序结构、变量、基本类型、初始化与赋值、可读性、常量与引用、typedef、枚举以及标准库中的字符串和向量类型。 1. **程序结构**: - 每个C++程序都必须包含`...

Global site tag (gtag.js) - Google Analytics