IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 07 const -> 正文阅读

[C++知识库]07 const

image-20211220013813451

Person p1("fred", 20);
const Person *p = &p1; // 指针p指向的是const person类的对象,该对象不能修改,但指针可指向其他的person对象
Person const *p = &p1; // 和上面一致的意思,只是不同的写法
Person *const p = &p1; //  p指针是一个const指针,指向Person对象,该指针只能指向p1, 不能指向其他对象,但p1对象可修改
    

区别的标准是 在*号的前面还是后面
在*号的前面 则对象是const
在*号的后面 则指针是const

也可以将指针和对象都变成const

const Person *const p = &p1;

image-20211220015046932

cip 全称是他指向的变量不能通过他修改的指针

const int *cip;
int i ;
cip = &i; // 这是允许的
// i的值可以变化, 但是不能通过cip去修改i的值(即*cip = 54),尽管他们是同一个东西

字符串

image-20211220015649678

#include<stdio.h>

int main(){
    char *p = "hello world";
    char arr[] ="hello world";

    printf("p\t=%p\n",p);
    printf("arr\t=%p\n",arr);
    printf("main\t=%p\n",main);
   
    return 0;
}

p =0x55fbc62d07d4
arr =0x7ffff25108dc
main =0x55fbc62d06aa

一个在代码段 一个在栈里面

image-20211220021600079

不可以修饰的对象

当使用const 修饰对象,那么其会修改对象变量值的函数将不可被调用
而标识有const的函数 则可以被调用

在函数的后面 标识 const (原型和定义的地方都需要重复)
表示这个函数不会修改对象。

int get_day() const;

int get_day() const {return day;}

const 在这本身的含义是说 thisconst

#include<iostream>
class A
{
private:
    int i;
public:
    A() : i(0){};
    ~A();
    // 没有构成重复定义,构成了overload关系, 因为其参数表不同
    void f() { std::cout << "f()" << std::endl;};
    void f() const { std::cout << "f() const" << std::endl;}
    // 等价于
    void f(A *this) { std::cout << "f()" << std::endl;};
    void f(const A *this) const { std::cout << "f() const" << std::endl;}
};

A::~A(){}

int main() {
    const A a;
    a.f();
    return 0;
}

如果成员变量是const 那么需要在initialize-list 里被初始化,否则会报错
也可以在前面加上 static

#include<iostream>
class A{
private:
    const int i;
public:
    A() {};
    ~A();
    void f() { std::cout << "f()" << std::endl;};
    void f() const { std::cout << "f() const" << std::endl;}
};

A::~A(){
}

int main() {
    const A a;
    a.f();
    return 0;
}

.\temp05.cpp: In constructor ‘A::A()’:
.\temp05.cpp:7:5: error: uninitialized const member in ‘const int’ [-fpermissive]
7 | A() {};
| ^
.\temp05.cpp:5:15: note: ‘const int A::i’ should be initialized
5 | const int i;
| ^

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 21:57:07  更:2022-03-11 21:57:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:49:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码