ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于const和constexpr

2022-05-24 01:04:32  阅读:153  来源: 互联网

标签:const 常量 int 函数 constexpr 关于 修饰 指针


1const 修饰变量,指针,函数,返回值,

const修饰变量的时候,表示你要声明的是一个常量,需要在声明的时候初始化;

const修饰函数的形参的时候,不需要初始化,但是用const修饰的形参是为了告诉你,在使用的时候不能改变这个参数的内容;

const修饰指针的时候:const int*P, int const*P,说明这个指针指的内容你不能改;

                                     int *const P;说明这个指针指的地址不能变;

const修饰函数返回值,说明返回值是个常量;

const写在函数参数列表的后边的时候,说明这个函数里边不能修改成员的值;且函数调用只能调用常成员函数;

我们现在来用代码验证一下:

1常量类型变量必须初始化,如果是外部传来的常量,可以不初始化(形式参数是常量)

 

 2 常量类型参数,可以不用设置初始值;const修饰的形参,告诉内部你不能修改这个值;

 

 

 

 

 3关于常指针,指向常量的指针;下图const修饰的是P1,P1指向的内容,一旦他们有指向的内容,你不能通过这个指针去修改内容;但是指针本身可以指向别的地方;

 

 4指针常量,是常量;常量声明时候要初始化;常量的值不可以改,这里P指向Arr,你不能再给它指向别的地方,但是它指向的内存的内容可以改;

给指针常量修改指向,就不行:

 

 

 5指向常量的指针常量,指针指向不能改,指针指向的地址里的内容也不能改

 

 6 const 修饰函数返回值;说明函数的返回值是一个常量;char* pre = fun();这行代码编译器会检查报错,但是你也可以强转char* pre =(char*) fun();

不过使用static_cast<char*>不行,static不能丢掉常量或者类型限定符

 

 

 

 7 const修饰函数;函数内部不能发生写操作,不能修改成员变量的值

#include "stdafx.h"
#include<stdio.h>
using namespace std;

class MyClass
{
public:
    
    const int fun();
    int fun2();
    int FunCCC2()const;

private:
    int myparam;

};

const int MyClass::fun()
{
    return 0;
}

int MyClass::fun2()
{
    return 1;
}

int MyClass::FunCCC2()const 
{
    printf("cal :%d",myparam);
    myparam = 33;
    return 0;
}

int main()
{
    MyClass A ;
    A.FunCCC2();
    return 0;
}

 

 

 

 我们来试试在FunCCC2里调用一下非const函数:你会看到这句话:不能将“this”指针从“const MyClass”转换为“MyClass &”

 

FUnCCC 调用一个“返回值类型是const但是函数不是const修饰的” 函数,可以吗?

 

 const修饰的函数调用const修饰的函数是可以的:

 

 


 

constexpr 编译阶段就要知道值;

 

 constexpr修饰函数,里边只能直接是return;甚至打印,const类型变量声明定义都不能在constexpr函数里边;constexpr里边使用的变量或者函数或者表达式,需要是能在编译阶段知道值的

 

 。。。未完待续

标签:const,常量,int,函数,constexpr,关于,修饰,指针
来源: https://www.cnblogs.com/8335IT/p/16304015.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有