c++ const关键字

const 在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

指定了一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。

  1. 定义常量,值初始化以后就不能再改变了
const int  a = 7;   //在声明常量变量时,必须初始化它们。
const int  b = a + 10; // 正确
a = 8;       // 错误,不能改变

如果我们试图改变它的值,就会得到编译时错误。

  1. 修饰指针变量
int a = 8;
int  b = 7;
const int *p1 = &a;     //const 修饰指针指向的内容,则内容为不可变量。
*p1 = 32; // 错   不可以修改
p1 = &b;  //可以


int* const p2 = &a;  // const 修饰指针,则指针为不可变量。
*p2 = 9; // 正确
p2 = &b; // 错误

const int * const  p3 = &a;  //const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。

3.参数传递和函数返回值

  • 函数参数
    const修饰值传递(内置数据类型),是没有任何必要的。
 void Func(const int a){
        a++;  // error
}

If a function has a non-const parameter, it cannot be passed a const argument while making a call.

void t(int*) 
{ 
    // function logic
}

If we pass a const int* argument to the function t, it will give error.

假设有这样两个函数的定义,使用const对指针和引用进行了限制,这个的意思是传进来的参数必须是const常量吗???

void Func(const string* a) ;
void Func(const strgin& a) ;

其实不是的,在函数形参中加上const,意思是不能在函数中去修改它的值,如果有修改的行为,就会引起错误。

  • 返回值
    修饰值普通类型的值,也是没有必要的,传的是值
const int h()
{
    return 1;
}

int main()
{
    const int j = h();    //ok
    int k = h();            //ok
}

修饰返回的指针或者引用。

const  string& a Func();
const  string& a Func();

const 修饰自定义类型的作为返回值,此时返回的值不能作为左值使用,既不能被赋值,也不能被修改。

const Tensor Cmf();

4 修饰类成员函数
const 修饰类成员函数,其目的是防止成员函数修改被调用对象的值,如果我们不想修改一个调用对象的值,所有的成员函数都应当声明为 const 成员函数。

注意:const 关键字不能与 static 关键字同时使用,因为 static 关键字修饰静态成员函数,静态成员函数不含有 this 指针,即不能实例化,const 成员函数必须具体到某一实例。

  1. 修饰类的成员数据
class Test
{
    const int i;
    public:
    Test(int x):i(x)   //需要使用参数列表初始化
    {
        cout << "\ni value set: " << i;
    }
};

int main()
{
    Test t(10);
    Test s(20);
}

  1. 修饰一个对象
    在对象的生存期内,永远不能更改其数据成员。 (不能调用对象的非const成员函数)
const class_name object;

参考链接:
https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html
https://www.studytonight.com/cpp/const-keyword.php

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关键字const多才多艺,你可以用它在class外部修饰global或namespace作用域中的常量,或修饰文件...
    何幻阅读 1,950评论 0 0
  • const作用 const关键字在C++中真是无处不在,无论是函数参数,还是函数返回值,还是函数末尾都经常会看到c...
    FlyerGo阅读 2,844评论 0 1
  • 本文是对const关键字的一个简单总结,测试环境IDE的是Xcode13.2.1 一、const及常量指针、指针常...
    long弟弟阅读 1,819评论 0 0
  • const 是 C++ 中的关键字,它会在编译期间(时机很重要),告诉编译器这个对象是不能被修改的。初学者一般会认...
    程序员在深圳阅读 6,872评论 1 11
  • const 修饰变量,表示变量的值不会改变: const TYPE ValueName = value; 指针使用...
    XY9264阅读 2,593评论 0 1

友情链接更多精彩内容