• 关于const和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里边使用的变量或者函数或者表达式,需要是能在编译阶段知道值的

     。。。未完待续

  • 相关阅读:
    自己的一个ALV隐藏列例子
    BAPI FOR MD61,MD62,MD63
    ALV 实现多表格 ( 多表格的ALV List
    MESSEG 类型
    Linux 启动tomcat服务器2
    oracle 笔记记录
    昨天、今天、明天
    Linux操作系统下MySQL数据库的使用方法(345)
    PHP安装问题
    另样文字 借你来欣赏
  • 原文地址:https://www.cnblogs.com/8335IT/p/16304015.html
Copyright © 2020-2023  润新知