C++中const小结

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

const 修饰普通变量

表示变量的值不能被改变。下面两条语句(第2行和第3行)表示的意思一致。

int a;
const int ca = 42;
//int const ca = 42;

const 修饰指针

指向常量的指针不能改变其指对象的值。第 5 行代码是错误的。

int a = 42;

const int * ip = &a;
int const * ipp = &a;
//*ip = 42;

常量指针不能改变其指向,也就意味着它必须要初始化。但是,可以通过常量指针改变其所指对象的值,如第 6 行代码,最终打印结果会是 56

int a = 42;
int b = 25;

int * const p = &a;
//p = &b;
*p = 56;
cout << "a: " << a << endl;

常量指针,同时它指向一个常量

const int a = 42;
const int * const p = &a;

const 与引用

临时对象的常引用。第2行代码会报错,不能将double类型引用绑定到int类型变量上。但是,加了const修饰后,就没有问题了。

int a = 42;
//double &f = a;
const double &f = a;

本质上,const引用,引用了一个不可改变的临时变量。编译器把代码处理成了如下形式

	const double temp = a;
    const double &f = temp;

const 修饰函数参数

如果第1行代码参数中没有const,则会报错,不能将一个非const左值引用类型绑定到一个右值(临时对象)上。故将参数修改为常引用

void foo(const std::string &str)
{
    cout << str << endl;
}

int main()
{
    foo("abcd");

    return 0;
}

const 修饰类数据成员

const修饰数据成员,称为常数据成员,可能被普通成员函数和常成员函数来使用,不可以更改。

必须初始化,可以在类中(不推荐),或者初始化列表中(这是在类对象生成之前唯一一次改变const成员的机会了)。

class A
{
public:
    A(int i)
        :_ci(i)
    {
        cout << "A(int i)" << endl;
    }

    ~A()
    {
        cout << "~A()" << endl;
    }

    void dis()
    {
        cout << _ci << endl;
    }
private:
    //const int _ci = 100;  // 不推荐
    const int _ci;
};


int main()
{
    A a(42);
    a.dis();

    return 0;
}

const 修饰类成员函数

  • const修饰成员函数,承诺在本函数内部不会改变类内的数据成员,因此,也只能调用承诺不会改变成员的其它const成员函数,而不能调用其它非const成员函数。

  • const修饰成员函数,放在声明之后,实现体之前。

  • 23行代码,它只能调用const成员函数,如果函数dis()是没有const修饰的话,第23行代码将会报错。

class A
{
public:
    A(int i, double d, float f)
        :_ci(i), _cd(d), _fe(f)
    {
        cout << "A()" << endl;
    }

    ~A()
    {
        cout << "~A()" << endl;
    }

    void dis() const
    {
        cout << _fe << endl;
    }

    void foo() const
    {
        //_fe = 4.56;
        dis();
    }
private:
    const int _ci;
    const double _cd;
    float _fe;
};


int main()
{
    A a(42, 25, 3.14);
    a.foo();

    return 0;
}

const 修饰对象

const修饰对象,保证在对象层面,不会修改数据成员。所以const对象,只能调用const成员函数。

参考资料

Stanley等《C++ Primer e5》
王桂林《C++基础与提高》文章来源地址https://www.toymoban.com/news/detail-842554.html

到了这里,关于C++中const小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C++笔记之如何给 `const char*` 类型变量赋值

    code review! 直接赋值一个字符串字面值(string literal):

    2024年02月04日
    浏览(58)
  • Unity 之 变量修饰符public 与private 以及默认

    当在Unity中使用 public 修饰符时,它将变量声明为 公共变量 ,这意味着该变量可以在Unity编辑器中进行设置,并且可以从其他脚本中访问和修改。公共变量在Unity中广泛用于在脚本之间共享数据,以及在Inspector面板中显示自定义设置。以下是关于 public 修饰符的详细信息和示例

    2024年02月11日
    浏览(46)
  • 问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题

    1 new String() 2 快捷方式生成变量 final修饰的 settings-----》Editor------》Code Style--------》java下的这两个选项不被勾选 final modifier 然后在生成变量的时候,再次跳出来 dexlare final 的时候,按下 Alt+F 步骤三:如果上一步没有生效,重启idea file-invalidate caches

    2024年02月12日
    浏览(53)
  • C语言进阶教程(const定义的变量真的不能被改变吗?)

    本篇文章将为大家讲解const定义的变量到底能不能被改变。 很多同学会误认为const定义的变量就是常量,那么常量是不可被修改的,所以说const定义的变量也是不可被修改的,这是一个错误的观点,其实const定义的变量属性是一个只读的变量属性,而不是常量。 const定义的变量

    2024年02月10日
    浏览(36)
  • 45从零开始学Java之详解static修饰符、静态变量和静态方法

    作者 :孙玉昌,昵称【 一一哥 】,另外【 壹壹哥 】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 在前一篇文章中, 壹哥 给大家讲解了abstract,从而我们掌握了抽象类与抽象方法的特性。除此之外,面向对象的核心修饰符

    2024年02月09日
    浏览(36)
  • MATLAB 之 数值数据,矩阵的表示和变量及其操作

    MATLAB 数据类型较为丰富,既有数值型、字符串等基本数据类型,又有结构(Structure)、单元(Cell)等复杂的数据类型。 在 MATLAB 中,没有专门的逻辑型数据,而以数值 1 (非零)表示真,以数值 0 表示假。 MATLAB 各种数据类型都以矩阵形式存在,所以矩阵是 MATLAB 最基本的数据

    2024年02月04日
    浏览(47)
  • 使用C语言自定义头文件,声明的变量或者函数用extern和不同extern修饰有什么区别?

    在C语言中,当在头文件中声明变量或函数时,使用 extern 和不使用 extern 修饰有以下区别: 使用 extern 修饰变量: extern 修饰的变量只是声明,不分配存储空间。它表示该变量的定义在其他源文件中,需要在使用该变量的源文件中进行定义和分配存储空间。 不使用 extern 修饰的

    2024年02月10日
    浏览(49)
  • C++中const char*、char const*和char * const的区别详解

       1、const char* p: 2、char const*:  等价于const char*; 用法如上,这里不过多解释  3、char * const: 4、const char * const p = str 等价于 char const * const p=str     p的指向不能改变,p指向的内容也不能被改变; 5、 补充:

    2024年02月04日
    浏览(43)
  • C++ 类访问修饰符

    数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。 public、private、protected 称为访问修饰符。 一个类可以有多个 public、protected 或 private 标记区域。

    2024年02月02日
    浏览(38)
  • c++ 中const

    对于基础类型直接赋值 c++中,对于基础类型,const 不开辟内存空间,data放在符号表中,类似于#define,但是在对data取地址的时候,系统会开辟空间,但是我们打印的时候是变量名,从符号常量表中取数据,所以可以理解为对data无影响 使用变量对const对象赋值 用变量为其赋值

    2024年03月09日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包