iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中多才多艺的 const
  • 856
分享到

C++中多才多艺的 const

2024-04-02 19:04:59 856人浏览 薄情痞子
摘要

目录1. 定义一个常全局变量2. 定义常指针3. 定义一个STL的常迭代器4. 定义一个类的内部常成员5. bit-wise和logical-wise常特性1. 定义一个常全局变量

1. 定义一个常全局变量


const int global = 100; // 初始化之后不可再赋值

这样的global实际上是一个常量,这是c++用来取代宏定义的其中一种措施,const常量有类型检测,提高编译器的效率。

2. 定义常指针

这有两个版本,分别是:


const int *p1 = &a; // p1不能修改它所指向的目标
int const *p1 = &a; // p1的另一种等价形式
int *const p2 = &a; // p2本身不可修改

上述代码中的p1经常被用作函数参数,用以限制指针的权限,在安全性方面功不可没。p2用的很少,我们很少需要一个本身指向不可变的指针

3. 定义一个STL的常迭代器

这也有类似的两个版本:


vector::const_iterator it1; // it1不能修改它所指代的目标对象

const vector::iterator it2; // it2本身不可修改

由于迭代器实际上就是广义指针,因此it1实际上相当于上述代码的p1,it2相当于上述代码的p2,同理it1用的较多,用来限制迭代器的权限。

4. 定义一个类的内部常成员

包括常成员数据和常成员方法:


class text

{

     const int aconst = 100; // 常成员数据,必须初始化

     void func(void) const; // 常成员方法,只能由常对象调用

     static int astatic;

};

类的常成员数据aconst,意味着类对象无法对其修改,这个很容易理解。至于类的常成员方法func就破费脑力了,语法上的理解是,func不能修改任何一个类对象的bit,这是显而易见的,这也正是C++标准对const成员方法的定义。\

来近距离看看func方法的使用:


int text::astatic = 100; // 类外初始化静态数据

void text::func(void) const // 类外定义const成员方法

{

astatic = 200; // 没毛病,astatic不是对象数据,此处可以被修改

aconst = 200; // 错误!const型函数不可修改类对象数据

}

定义如上的成员方法很重要,因为它明确地告诉了类的使用者,哪些函数可以修改类对象信息,哪些不会修改类对象信息。

func() 这样的函数const成员方法,只能被常对象调用,以确保不违反权限紧缩原则,比如:


text t1; // 普通对象t1
const text t2; // const型对象t2
t1.func(); // 错误!普通对象不可调用常成员方法
t2.func(); 

注意:函数本体的const属性是可以被视为重载的依据的,换句话说如果以上类text提供了non-const版本的func函数,那么t1将会自动调用non-const那个版本。

以上陈述似乎平淡乏味,但考虑C++语法规定的这种bit-wise特性的常成员在处理类成员指针,并且指针指向类外部内存时,情况也许会变得有趣。

5. bit-wise和logical-wise常特性

所谓bit-wise constness指的是类对象的内部内存意义上只读约束,而loiGCal-wise指的是逻辑意义上的只读约束。编译器没有智能,它只能实现bit-wise意义上的约束,下面的例子讨论const成员 operator[ ] 的表现可以帮助理解:


class text
{
     ... ...
     char &operator[ ](int pos) const;
private:
     char *p;
};

// const关键字保证了该成员方法只能被 const 对象调用
char &text::operator[ ](int pos) const
{
      return p[pos];
}

上述代码中,类text存储真正字符串的地方是指针 p 指向的内存区域,假设此时定义一个 const 型的常对象,那么它只能保证类内部信息(也就是p本身)不被修改,却无法保证其所指向的内存区域的安全性。来看下面的代码:


const text ct("abcd");

ct[0] = 'A'; // 一个被编译器允许却跟逻辑相悖的语句

此处ct是一个const型对象,从字面理解出发,我们应该认为ct对象是一个常量,我们应该无法通过任何方式修改其内部信息,但可惜,ct里面的字符串信息实际上并不存在在类内存区域中,于是就出现了可以对一个const型对象进行赋值的有趣现象。

解决以上问题也不难,可以改写 operator[ ] 成员方法的返回值类型:


const char &operator[ ](int pos) const;

此时就再也不能对 ct[0] 赋值了,但这只是个个例,关键我们要掌握的内容是:如果我们的类对象拥有成员指针,那么一般意义上的const成员方法只能保证bits-wise的常量性(即保证类对象内部的内存信息不被修改),但无法保证所谓的 logical-wise的常量性(即保证逻辑上哪些信息不被修改)。

到此这篇关于C++中的 const的文章就介绍到这了,更多相关C++中的const内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++中多才多艺的 const

本文链接: https://www.lsjlt.com/news/136736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中多才多艺的 const
    目录1. 定义一个常全局变量2. 定义常指针3. 定义一个STL的常迭代器4. 定义一个类的内部常成员5. bit-wise和logical-wise常特性1. 定义一个常全局变量 ...
    99+
    2024-04-02
  • C++中const char*、char const*、char * const三者的区别
    目录一、const char *ptr;二、char const *ptr;三、char * const ptr;C/C++ 中关于以下三种定义: const char *...
    99+
    2024-04-02
  • c++中const的含义
    const 在 c++ 中用于声明常量,确保变量值在程序执行期间不变。具体用法如下:在变量类型前加 const 声明常量,如:const int my_constant = 10;con...
    99+
    2024-04-28
    c++ 作用域
  • c++中const的用法
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • const在c++中的用法
    c++ 中的 const 用于声明不可变的数据,即常量,确保变量或对象在声明后不能被修改,提升数据完整性,提高代码可读性,并允许编译器优化。主要用途包括:1. 确保数据完整性;2. 提高...
    99+
    2024-04-28
    c++ 代码可读性
  • const在c++中的作用
    const 关键字在 c++ 中用于定义常量,即程序运行期间值不可改变的变量,包括:声明常量变量,如 const int max_size = 100;防止意外修改,确保编译时检测修改并...
    99+
    2024-04-26
    c++ 代码可读性
  • C++中的const怎么用
    本文小编为大家详细介绍“C++中的const怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中的const怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。const 是 constant 的缩写,...
    99+
    2023-06-27
  • const在c和c++中的区别
    在 c 和 c++ 中,const 关键字用于声明常量。在 c 中,const 只能修饰变量,不能修饰指针或数组;在 c++ 中,const 可以修饰变量、指针和数组。主要的差异在于:作...
    99+
    2024-04-28
    c++ 作用域
  • 详解C++中的const和constexpr
    目录一.const常量与#define比较二.const修饰1.修饰普通变量,必须初始化2.修饰类变量和成员变量3.修饰成员函数4.修饰指针5.修饰引用三.const转换四.顶层co...
    99+
    2024-04-02
  • C++和C中const的区别详解
    目录C中的constconst修饰局部变量const修饰全局变量const修饰的全局变量有外部链接属性const与指针C++中的constconst修饰普通全局变量const修饰普通...
    99+
    2024-04-02
  • C++中const的简单用法
    C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应...
    99+
    2023-06-03
  • C/C++编程中const的使用详解
    目录1 概述:const和define的区别2. 修饰局部变量3. 常量指针与指针常量4. 修饰函数的参数5. 修饰函数的返回值6. 修饰全局变量总结1 概述:const和defin...
    99+
    2024-04-02
  • C++和C中const的区别是什么
    本篇内容介绍了“C++和C中const的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const,这个词字面意思为:常数。这就表示...
    99+
    2023-06-21
  • const在c语言中的意义
    const关键字用于声明 c 语言中的常量,即不可修改的值。它提高了程序可靠性和可读性,还包含以下好处:防止修改,避免意外更改;提高效率,编译器优化常量使用;改善可读性,表明值固定;广泛...
    99+
    2024-05-08
    c语言 敏感数据
  • const在c语言中的用法
    const 是 c 语言中用于定义常量的关键字,确保变量值在编译时确定且不可修改。其用法包括:定义只读变量,保护重要数据防止意外修改。指定函数参数或返回值的常量性质,提高代码可读性和稳定...
    99+
    2024-04-28
    c语言 代码可读性
  • C++中的多态详谈
    目录1. 多态概念1.1 概念2. 多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 代码示例2.5 虚函数重写的两个例外2.6 C++11 overr...
    99+
    2024-04-02
  • c++中const的作用和用法
    const 在 c++ 中表示不可变性,用于强制变量、函数参数或类成员保持常量,使其值在程序运行期间不可修改。具体用法包括:修饰变量以强制不可变性,如 const int my_age ...
    99+
    2024-05-01
    c++
  • const在c语言中的作用
    const 在 c 语言中用于定义常量,防止变量值在程序执行期间被修改。具体作用包括:确保代码安全性和可靠性提高代码可读性和可维护性优化代码性能 const 在 C 语言中的作用 co...
    99+
    2024-05-10
    c语言 代码可读性
  • C语言与C++中const的用法对比
    目录一、C语言中的const二、C++中的const三、进一步比较C和C++中的const四、const与宏的区别五、小结一、C语言中的const const修饰的变量是只读的,本质...
    99+
    2024-04-02
  • 多态的魔力:Java 中令人惊叹的代码艺术
    多态性主要通过继承和方法重写来实现。继承允许你创建一个新的类,继承另一个类的所有属性和方法。方法重写允许你覆盖父类中的方法,以便在子类中提供自己的实现。 当调用一个多态方法时,编译器会根据对象的实际类型来确定要执行哪个方法。这称为动态绑定...
    99+
    2024-02-06
    Java 多态性 继承 方法重写 动态绑定 Java的多态性是面向对象编程中的一项基本特征 它允许不同类型的对象可以执行相同的操作 而无需考虑其具体类型。这使得Java程序更加灵活和可扩展 因为
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作