当前位置: 首页 > news >正文

C++const正确性编程

C++const正确性编程

const正确性是指使用const关键字明确表示哪些值不应被修改。这是C++编程中重要的设计原则,可以提高代码的安全性和可读性。

const成员函数承诺不修改对象状态,可以被const对象调用。

#include
#include
#include

class Person {
std::string name_;
int age_;
mutable int access_count_;
public:
Person(const std::string& name, int age)
: name_(name), age_(age), access_count_(0) {}

const std::string& name() const { return name_; }
int age() const { return age_; }

void set_name(const std::string& name) { name_ = name; }
void set_age(int age) { age_ = age; }

int get_access_count() const {
++access_count_;
return access_count_;
}

void display() const {
std::cout << name_ << " (" << age_ << ")\n";
}
};

void const_member_demo() {
const Person p1("Alice", 30);
p1.display();
std::cout << "Name: " << p1.name() << "\n";
std::cout << "Access count: " << p1.get_access_count() << "\n";

Person p2("Bob", 25);
p2.set_age(26);
p2.display();
}

const引用参数避免拷贝且保证不修改。

void print_vector(const std::vector& vec) {
for (int v : vec) {
std::cout << v << " ";
}
std::cout << "\n";
}

int sum_of(const std::vector& vec) {
int total = 0;
for (int v : vec) total += v;
return total;
}

void const_ref_demo() {
std::vector data = {1, 2, 3, 4, 5};
print_vector(data);
std::cout << "Sum: " << sum_of(data) << "\n";
}

const指针和指向const的指针。

void const_pointers() {
int x = 10, y = 20;

const int* ptr1 = &x;
ptr1 = &y;
std::cout << "ptr1 points to " << *ptr1 << "\n";

int* const ptr2 = &x;
*ptr2 = 30;

const int* const ptr3 = &x;
std::cout << "ptr3: " << *ptr3 << "\n";
}

const返回值防止对临时对象的修改。

class String {
char* data_;
public:
explicit String(const char* str) {
data_ = new char[std::strlen(str) + 1];
std::strcpy(data_, str);
}

~String() { delete[] data_; }

const char* c_str() const {
return data_;
}
};

mutable允许const成员函数修改特定成员。

class Cache {
mutable bool cached_;
mutable int cached_value_;

int compute() const {
std::cout << "Expensive computation\n";
return 42;
}

public:
Cache() : cached_(false), cached_value_(0) {}

int get_value() const {
if (!cached_) {
cached_value_ = compute();
cached_ = true;
}
return cached_value_;
}
};

void mutable_demo() {
const Cache cache;
std::cout << "Value: " << cache.get_value() << "\n";
std::cout << "Cached: " << cache.get_value() << "\n";
}

const_iterator保证只读遍历。

void const_iterator_demo() {
std::vector vec = {10, 20, 30, 40, 50};

for (auto it = vec.cbegin(); it != vec.cend(); ++it) {
std::cout << *it << " ";
}
std::cout << "\n";
}

const重载选择不同行为。

struct OverloadDemo {
void func() {
std::cout << "non-const version\n";
}
void func() const {
std::cout << "const version\n";
}
};

void const_overload() {
OverloadDemo obj;
const OverloadDemo const_obj;

obj.func();
const_obj.func();
}

const与引用限定符结合。

class DataHolder {
std::vector data_{1, 2, 3};
public:
const std::vector& get() const& {
return data_;
}

std::vector get() && {
return std::move(data_);
}
};

const正确性使代码意图更明确,减少bug,是编写高质量C++代码的基本要求。

http://www.jsqmd.com/news/1035525/

相关文章:

  • 夯爆了!“内置规则+AI分析”双引擎自动校验Word全部表格的勾稽关系
  • 常州帝王绿去哪卖?2026常州回收帝王绿翡翠靠谱门店盘点 - 名奢变现站
  • ETL、ELT、CDC傻傻分不清?一文读懂数据同步三大模式
  • 儒竞科技2.26亿元泰国基地全面开工,智能控制业务迈入海外制造
  • 2026吉安市政企广告制作哪家强?精选本地源头厂家直通车 - 品牌2026
  • 深圳靠谱黄金回收推荐,连锁门店全程无扣费 - 讯息早知道
  • IP地址隐藏方案:代理+浏览器指纹+WebRTC/DNS防泄漏
  • 很多厦门人忽略这1点,卖包包白白亏了不少钱 - 讯息早知道
  • 生成式AI可靠性六道保险丝:从输入过滤到人工接管的工程化实践
  • 计算机Django毕设实战-基于 Python+Django 的高校学生考勤请假可视化管理系统的设计与实现 基于 Python+Django 的【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机毕业设计之jsp冬奥志愿者服务系统
  • 2026五家西安同城搬家服务商解析 - 品研笔录
  • 未来展望,ROCm 生态演进对大模型推理的影响
  • Makefile自动化编译实战项目
  • 转行计算机领域——实战应用与学习路径规划
  • 【2026年6月】排水板厂家、虹吸排水系统、土工材料 推荐指南 - 多才菠萝
  • Codex 怎么开通?国内用户常见问题整理
  • 国内类OpenClaw主流产品汇总(2026版):名称·出品方·部署方式·模型·定位,一张表搞定
  • 2026永康全屋定制,选这3家不踩坑
  • 陕西门窗厂家实力观察:西安时瑞雅斯门窗科技的三十余年制造沉淀 - 品研笔录
  • 如何让老旧Mac重获新生?OpenCore Legacy Patcher终极解决方案
  • 会议记录效率翻倍!2026实测5款工具,让我彻底告别整理焦虑
  • 2026石家庄贵金属黄金回收去哪卖最划算?实测多家店 - 名奢变现站
  • 多维聚合中的数据操作:维度契约、计算谱系与粒度对齐
  • 2026年贵阳铁签烤肉怎么选?老贵阳正宗烟火气 vs 竹签烤肉全对比指南 - 优质企业观察收录
  • 异构数据库统一管控(上):为什么多库混合部署必然走向统一管控
  • 实测厦门包包回收,高端变现认准这些门店 - 讯息早知道
  • 如何识别真正从零研发的大模型?三分钟技术鉴别法
  • 广告工厂管理软件选购指南:如何选择适配需求的方案 - 资讯快报
  • 南宁百达翡丽回收|正规门店优选榜单,出手零套路避坑 - 薛定谔的梨花猫