首页 > 其他分享 >【嵌入式面经专题】5-深入了解 const

【嵌入式面经专题】5-深入了解 const

时间:2023-07-24 21:56:16浏览次数:25  
标签:const 函数 int age 面经 嵌入式 stu 修饰

在C++中,const 常用于修饰常量,告诉编译器某值保持不变。需要注意的是,常量在定义之后就不能修改,因此定义时必须初始化。

const int HELLO = 6;  // 正确
const int WORLD;  // 错误

除此之外,const 更强大的地方是修饰函数参数、函数返回值、函数体。

被 const 修饰的东西都受到强制保护,可以防止意外改动,提高程序的健壮性。很多C++的书籍建议“use const whenever you need”。

 

1. const修饰函数参数时,函数形参在函数体内就变为常量,所指向的内容不可改变;函数参数基本类型的值、指针指向的值、引用变量的值不可改变

比如下面的例子,给 a 和 b 加上const修饰后,如果函数内的语句试图修改 a 或 b,编辑器就会报出错误。

void function(int* output, const classA& a, const classB* b) {
    // do something
}

 

2. const修饰函数返回值时,函数返回值变为常量,所指向的内容不可改变;此时函数返回的基本类型值、指针指向值、引用的变量的值不可改变;其也常用于运算符的重载;

#include <iostream>
using namespace std;

class Student {
public:
    int& GetAge() {
        return m_age;
    }

    const int& GetAgeConst() {
        return m_age;
    }

    void ShowAge() {
        cout << "Age: " << m_age << endl;
    }

private:
    int m_age = 0;
};

int main()
{
    Student stu;
    stu.ShowAge();

    stu.GetAge() = 5; // 会修改成员变量的值
    stu.ShowAge();

    stu.GetAgeConst() = 8; // 编译器会报错
    stu.ShowAge();

    return 0;
}

 

 

3. const修饰函数时,表明该函数不能修改类的数据成员,不能调用非const成员函数,只能调用const成员函数

比如:

  • void SetAge(int age)
  • void SetAgeConst(int age) const

两者的区别在于:前者可以修改类的数据成员,而后者不可以。

#include <iostream>
using namespace std;

class Student {
public:
    void SetAge(int age) {
        m_age = age;
    }

    void SetAgeConst(int age) const {
        m_age = age;
    }

    void ShowAge() {
        cout << "Age: " << m_age << endl;
    }

private:
    int m_age = 0;
};

int main()
{
    Student stu;
    stu.ShowAge();

    stu.SetAge(6); // 正确
    stu.ShowAge();

    stu.SetAgeConst(8); // 错误
    stu.ShowAge();

    return 0;
}

 

 

总结:

1、const修饰函数参数时,形参变为常量

2、const修饰函数返回值时,返回值变为不可更改的左值

3、const修饰函数时,不可更改类的成员变量的值

标签:const,函数,int,age,面经,嵌入式,stu,修饰
From: https://www.cnblogs.com/FBsharl/p/17578458.html

相关文章

  • 【后端面经-Java】String与StringBuffer与StringBuilder的比较
    目录1.String2.StringBuffer3.StringBuilder4.性能提升5.总结和比较面试模拟参考资料1.String不可变查看String源码如下:publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{/**Thevalueisusedforcharacterstora......
  • 3个关键词,解读触想智能二代嵌入式CX3568安卓工控一体机新品!
    正如我们所感知的,AIoT的应用广泛渗透在社会生产生活的方方面面,AIoT驱动的“智能+性能”的需求升级,正不断倒逼配套软硬件设备厂商积极开展创新探索,以满足日趋多元的市场需求。基于对应用变化的深刻洞察,触想智能于近期推出面向AIoT边缘计算领域显控应用的升级款二代嵌入式A......
  • static和const
    staticstatic修饰的变量存储于全局区,而初始化的和未初始化的在全局区分开储存,如果没显示初始化会被程序自动初始化为0对于局部变量static延长了它的生命周期,即不随函数的销毁而销毁,只有程序运行结束才会销毁static使得局部变量只在第一次调用的时候初始化,之后的调用不再初始......
  • 【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)
    原文:https://zhuanlan.zhihu.com/p/573207792?utm_id=0知识架构及层次Linux内核由三部分构成:Bootloader:启动引导系统(可执行文件)Kernel:内核(可执行文件)RootFileSystem:根文件系统嵌入式Linux系统构成及启动略析嵌入式Linux启动类同4X100米接力跑,是由多个部分共同完成......
  • 嵌入式通用按键模块
    前言最近沉迷于收集一些大佬所开源的一些通用模块,这样在以后开发的过程中就能极大的减轻重复劳动。这次所带来的是MultiButton,一个小巧简单易用的事件驱动型按键驱动模块。①MultiButton简介这个项目非常精简,只有两个文件,可无限量扩展按键,按键事件的回调异步处理方式可以简化......
  • 10.define和const的区别
    define生效于编译预处理阶段,const生效于编译阶段define只是简单的字符串替换,在编译预处理阶段将所有用到宏的地方进行字符串替换,没有进行数据类型检查;const有数据类型,编译器要对其进行类型检查define不分配内存,而const在静态区分配内存,因此define没有地址,不可以使用指针指......
  • 嵌入式系统设计师考试攻略分享
    liwen012023.07.20前言7月20日开始,可以查询2023年的嵌入式系统设计师的考试成绩了,该考试有上午和下午共两科,每科满分75分,两科同时达到45分为及格通过。我的成绩是上午45分,下午61分,刚好压线通过,这里分享一下我的考试和备考经验,以供参考。(一)这是个什么考试?全国计算机技术与......
  • 【玩转嵌入式屏幕显示】(五)TFT-LCD屏幕显示图片
    1.使用取模软件对图片取模取模软件使用Img2LCD,附上下载链接。首先准备一张用于显示的图片,修改图片像素值为240*240:在取模软件中打开图片:......
  • C++Const变量的存储位置
    const变量/对象的存储位置const局部变量const局部基础变量和自定义变量都存储在栈上structdiy_class{inta;intb;diy_class(inta,intb):a(a),b(b){}};intmain(){intb=1;//这个肯定在栈上constinta=10;//比较ab两个变......
  • android studio Attribute value must be constant
    解决"androidstudioAttributevaluemustbeconstant"错误的步骤当我们在使用AndroidStudio开发应用程序时,有时会遇到"Attributevaluemustbeconstant"的错误。该错误通常发生在我们尝试在XML布局文件中设置属性的值时。下面是解决该错误的步骤,以及每个步骤需要做......