当前位置: 首页 > 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.gsyq.cn/news/1547426.html

相关文章:

  • 不用 NVIDIA 也能玩大模型,HIPify 加 SGLang 的低成本落地方案
  • 夯爆了!“内置规则+AI分析”双引擎自动校验Word全部表格的勾稽关系
  • 2026吉安市政企广告制作哪家强?精选本地源头厂家直通车 - 品牌2026
  • 生成式AI可靠性六道保险丝:从输入过滤到人工接管的工程化实践
  • Makefile自动化编译实战项目
  • Codex 怎么开通?国内用户常见问题整理
  • 转行计算机领域——实战应用与学习路径规划
  • 如何识别真正从零研发的大模型?三分钟技术鉴别法
  • 南宁百达翡丽回收|正规门店优选榜单,出手零套路避坑 - 薛定谔的梨花猫
  • 2026 上海优质回收门店白皮书,无损耗正规商家实力排行榜 - 逸程
  • 如何快速获取百度网盘提取码:5步实现自动化查询的完整实战指南
  • 创业不易,别让一次数据违规毁掉所有努力
  • ceph flag
  • 深度解析跨平台文件系统支持:Windows用户必备的完整Btrfs驱动指南
  • 模型上线不是终点:生产级机器学习的系统性生存法则
  • 乌兰察布之夜天骄盛会游玩推荐 - 行业深度观察C
  • 国内医院导医服务机构推荐 | 聚焦细心负责的专业服务 - 互联网科技品牌测评
  • 温州外箱厂家推荐哪家 - 品牌推广大师
  • 微PE启动U盘无法打开的故障排查与修复全攻略
  • 2026年 净化空调厂家实力榜单:洁净空调/净化中央空调系统,核心技术+高效节能解决方案深度推荐! - 品牌发掘
  • 无锡名表回收哪家靠谱?二十余年连锁禹竞 - 奢品小当家
  • 辽阳白塔区黄金回收避坑指南|本地全国连锁门店实测汇总 - 行行星
  • 2026年方形不锈钢水箱厂家怎么选?从西南到全国,这四家实力企业值得关注 - 品研笔录
  • 电容与电感
  • 医美家:资质齐全覆盖全国的专业医院物业服务提供商 - 互联网科技品牌测评
  • 智能体设计模式:记忆管理 Memory,让 Agent 不再健忘
  • 2026 成都钻石回收行业白皮书,本地合规回收商家完整盘点 - 奢侈品回收评测
  • 高低压电抗器厂家排名评测:选厂关键看核心元件制造与系统方案落地 - 资讯焦点
  • Sunshine游戏串流服务器技术架构深度解析:自托管游戏串流的专业实现
  • 星闪联盟认证测什么?安华检测带你读懂检测项目,提前避坑 - 资讯焦点