C/C++面试常见问题——const关键字的作用和用法

这篇具有很好参考价值的文章主要介绍了C/C++面试常见问题——const关键字的作用和用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先我们需要一下const关键字的定义,const名叫常量限定符当const修饰变量时,就是在告诉编译器该变量只可访问不可修改,而编译器对于被const修饰的变量有一个优化,编译器不会专门为其开辟空间,而是将变量名和数值作为一个kv键值对存入到符号表中。

注意:const修饰的变量必须要在定义时初始化

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

如上,当我们想要通过指针改变a时发现无法改变,这就是因为编译器对其的优化,导致a为存入符号表的一个固定值,而&a和b的地址一样只是编译器想让我们看到的,实际上是取地址时,编译器又开了一块空间存储a的值,并将这个空间地址给b。

 通过volatile关键字修饰变量我们可以告诉编译器,该变量无需优化

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

如上所示

 一,const常见用法

1.1 const修饰变量

const int a=10;
int const a=10;

const修饰变量如下,该变量无法直接修改,但是可以通过指针进行修改

1.2 const修饰指针

const修饰指针以*为界限分为常量指针、指针常量,也就是我们经常说的左定值,右定向

常量指针

const在*号左边,指针所指向的值无法改,但是可以改变指针的指向

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

指针常量

const在*号右边,指针所指向的值可以修改,但是无法更改指针的指向

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

以及两者共存的情况 ,无法修改指针指向的内容,也无法修改指针的指向

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

1.3 const修饰类成员变量

const修饰类成员变量,该变量必须要在初始化列表初始化,初始化之后该变量无法在更改,即使是构造函数也无法修改

class example
{
public:
	example(int a=10)
		:_a(a)
	{
		//_a = 11;//无法修改,会报错
	}
private:
	const int _a;
};

1.4 const修饰类成员函数

const修饰成员函数使用格式如下

class example
{
public:
	example(int a=10)
		:_a(a)
	{}
    void Example() const;
private:
	int _a;
};

实际上const修饰的是Example成员函数隐藏的*this指针,因此其实际修饰格式如下

class example
{
public:
	example(int a=10)
		:_a(a)
	{}
    //void Example() const;
    void Example(const example* this);
private:
	int _a;
};

因此当const修饰成员函数时,该函数对于对象的成员变量只能读取不能修改

1.5 const修饰函数返回值

const修饰函数返回值,则函数返回值被赋值对象必须也被const所修饰,通常返回值与引用搭配

const int& example();

const int a=exampel();//正确
int a=example();//错误

二、const实战常用用法解析

2.1 const修饰函数输入式参数

const修饰输入式参数指的是,当我们函数的某个参数只希望函数内部读取而不能修改,就可以使用const进行修饰

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++ 

例如上面所示,STL库中的strcmp函数,比较两个字符串是否相等,因此无需对其进行修改,为了保护参数就可以用const进行修饰

2.2 const修饰类成员函数

当类成员函数只需访问类成员变量,如打印成员变量之类,此时就可以用const修饰,防止误改成员变量

 C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

如上图STL中的vector容器,重载[]访问数组元素的接口,就有为了保证成员变量不被改变而const修饰成员函数的操作

2.3 const修饰函数返回值

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

C/C++面试常见问题——const关键字的作用和用法,面试常见问题,c语言,c++

 如上图所示,注意vector中重载[]的第二个接口的返回值const_reference,而该类型实质上是const value_type&,注意这个引用,后面要考。

首先当我们选择引用返回相比于正常返回,中间减少了数据拷贝——临时变量——数据拷贝的过程,有效提升了返回效率。而引用返回也有其弊端,如果用户修改这个返回值,那么就会直接影响容器中对应的值,如果我们不想让用户随意修改容器中的数据又想要高效的引用返回,那么就需要用const修饰返回值文章来源地址https://www.toymoban.com/news/detail-720597.html

到了这里,关于C/C++面试常见问题——const关键字的作用和用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C# const关键字学习

    C# const关键字学习

    你居然不知道const?今天在做项目的时候别人问我的,我确实不知道这个,今天我们就来一起学习一下const定义局部变量,这个对于常数变量非常的友好的,可以提高程序的运行效率,因为它是在编译时的操作,所以我们必须要学习一下,这不就是提

    2024年01月22日
    浏览(13)
  • 【C++】const关键字的详解!!

    【C++】const关键字的详解!!

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 const是永恒不

    2024年02月03日
    浏览(11)
  • ES6中let和const关键字与var关键字之间的区别?

    ES6中let和const关键字与var关键字之间的区别?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(13)
  • 重学C++系列之const与static关键字分析

    重学C++系列之const与static关键字分析

            本篇幅讲解const与static,主要围绕在类的范围内叙述,包括作用和使用场景等。         1、const修饰的成员变量,成员变量初始化后不能再修改。         2、const修饰的成员函数,成员函数不可以修改成员变量,也不能间接修改。         3、static修饰的成员

    2024年02月15日
    浏览(13)
  • 在C++和C中static关键字的用法,在C++和C中const关键字的用法

    1、在C++和C中static的用法 答:static表示存储类型,修饰数据类型。在C语言中,static修饰局部变量,内存分配在静态区,生命周期延长,作用域不变。static修饰全局变量,内存分配在静态区,作用域被局限于本文件,不能被extern引用。static修饰函数,不能被exter

    2024年02月10日
    浏览(12)
  • 【C++】const、static关键字和构造函数初始化

    【C++】const、static关键字和构造函数初始化

    💗个人主页💗 ⭐个人专栏——C++学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 1. const修饰成员函数 1.1 语法格式 1.2 权限放大缩小 1.3 思考 1.4 解答 2. 再谈构造函数 2.1 构造函数体赋值 2.2 初始化列表 2.3 explicit 3. static成员 3.1 静态变量 3.2 静态函数 3.3 静态成员变量

    2024年02月19日
    浏览(13)
  • static,const,volatile,extern,register关键字深入解析

    static,const,volatile,extern,register关键字深入解析

    ✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:@rivencode的个人主页 🔥系列专栏:玩转C语言 💬保持学习、保持热爱、认真分享、一起进步!! 我们都知道一个源文件要生成我们计算机课执行的文件要经过: 源文件(test.c)—预编

    2023年04月08日
    浏览(13)
  • 嵌入式C语言关键字(const、static、volitatile)

    C语言中const修饰通常是用来声明常量,并声明常量的值不能修改。当涉及 指针变量 时情况就会变得更加有趣,需要特别注意。因为有两样东西都有可能成为常量— 一种是用来限定指向的空间的值不可修改;另一种是限定指针不可修改 。下面是几个声明的例子: 总结:cons

    2024年02月06日
    浏览(12)
  • JS中var、let以及const关键字到底怎么用?

    JS中var、let以及const关键字到底怎么用?

    在学习JS变量之后,初学者都避免不了都会一下子分不清这三个变量在代码块中的作用域范围,其实 const 简单理解它就是定义常量的,但是在实际开发中,我们却很常见它的身影。 说实话刚开始我也分不清他们的作用域范围,但是自己再去详细看一遍教程之后,其实发现还是

    2023年04月13日
    浏览(6)
  • 【C++】C 语言 和 C++ 语言中 const 关键字分析 ( const 关键字左数右指原则 | C 语言中常量的原理和缺陷 | C++ 语言中常量原理 - 符号表存储常量 )

    【C++】C 语言 和 C++ 语言中 const 关键字分析 ( const 关键字左数右指原则 | C 语言中常量的原理和缺陷 | C++ 语言中常量原理 - 符号表存储常量 )

    【C 语言】const 用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 ) 普通类型数据的常量定义时 , const 在 数据类型 的 左边 和 右边 其作用 是相同的 ; 指针数据的相关常量类型 : const 在 指针符号

    2024年02月11日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包