news 2026/6/18 11:23:50

C++const正确性编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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++代码的基本要求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 11:23:01

魔兽争霸3终极优化指南:从60帧到300帧的免费性能飞跃

魔兽争霸3终极优化指南&#xff1a;从60帧到300帧的免费性能飞跃 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在忍受魔兽争霸3的卡顿和限制吗&am…

作者头像 李华
网站建设 2026/6/18 11:22:58

嵌入式数据持久化实战:NXP JenOS PDM API原理与应用指南

1. 项目概述&#xff1a;嵌入式系统中的数据“保险箱” 在物联网设备、智能家居传感器或者工业控制器这类嵌入式系统的开发里&#xff0c;有一个问题几乎每个工程师都会遇到&#xff1a;设备一断电&#xff0c;RAM里的数据就全没了。想象一下&#xff0c;一个智能门锁&#xff…

作者头像 李华
网站建设 2026/6/18 11:22:45

从漏洞防范到纵深防御:构建企业级前端安全体系实战指南

1. 项目概述&#xff1a;为什么前端安全需要从“漏洞防范”升级到“安全体系”&#xff1f;最近在帮团队排查一个线上问题时&#xff0c;遇到了一个典型的场景&#xff1a;一个内部文档协作功能&#xff0c;用户反馈上传文档后&#xff0c;前端页面提示“文档安全令牌格式不正确…

作者头像 李华
网站建设 2026/6/18 11:22:44

Delphi AES跨平台加解密实战:与Java/C#/JS无缝对接

1. 项目概述&#xff1a;为什么是Delphi与AES的跨平台组合&#xff1f;在桌面应用、工业控制软件乃至遗留系统的维护与现代化改造中&#xff0c;Delphi的身影依然活跃。它凭借高效的RAD开发模式、强大的VCL/FMX组件库和稳定的原生编译能力&#xff0c;在特定领域内依然是不可替…

作者头像 李华
网站建设 2026/6/18 11:22:41

从挖矿病毒防御到态势监测响应:构建主动安全闭环实战指南

1. 项目概述&#xff1a;从“挖矿病毒”到“态势监测响应”的攻防博弈如果你负责过企业或机构的网络安全&#xff0c;大概率遇到过这样的场景&#xff1a;某天&#xff0c;业务部门突然抱怨某个核心应用系统卡顿得厉害&#xff0c;登录服务器一看&#xff0c;CPU占用率长期维持…

作者头像 李华
网站建设 2026/6/18 11:22:40

从GeoSOS下载到地理空间模拟:Python实现城市扩张预测全流程

1. 项目概述&#xff1a;从“geosos下载”说起&#xff0c;一个数据工作者的日常最近在几个数据分析的社群里&#xff0c;总能看到有朋友在问“geosos怎么下载”、“geosos数据源哪里找”这类问题。乍一看这个标题有点模糊&#xff0c;但作为一个和数据打了十几年交道的老兵&am…

作者头像 李华