Effective C++ 条款01:视 C++ 为一个语言联邦

Effective C++ 条款01:视 C++ 为一个语言联邦


核心思想:C++ 是由多个子语言组成的联邦,每个子语言有自己的编程范式。理解这些子语言及其规则切换,是写出高效 C++ 代码的关键。

四个子语言及其规则:
  1. C 语言
    • 基础:过程式编程,包含指针、数组、预处理等。
    • 规则:按值传递高效(如内置类型)。
  2. 面向对象 C++
    • 核心:类、封装、继承、多态、虚函数。
    • 规则:优先按 const 引用传递对象。
  3. 模板 C++
    • 特性:泛型编程、模板元编程。
    • 规则:编译期推导类型,需注意依赖类型(typename)。
  4. STL(标准模板库)
    • 组件:容器、迭代器、算法、函数对象。
    • 规则:迭代器按值传递(类似指针)。

代码示例

1. C 语言部分:内置类型按值传递
#include <iostream>// 内置类型高效按值传递
void printInt(int val) {  // 推荐:直接传递 intstd::cout << "Value: " << val << std::endl;
}int main() {int x = 42;printInt(x);  // 高效拷贝return 0;
}
2. 面向对象 C++:对象按 const 引用传递
#include <string>class Person {
public:Person(std::string name) : name_(std::move(name)) {}virtual ~Person() = default;virtual std::string role() const { return "Person"; }protected:std::string name_;
};class Student : public Person {
public:using Person::Person;std::string role() const override { return "Student"; }
};// 按 const 引用传递避免拷贝和多态失效
void printRole(const Person& p) {  // 正确:支持多态,无拷贝std::cout << p.role() << std::endl;
}int main() {Student s("Alice");printRole(s);  // 输出 "Student"(多态生效)return 0;
}
3. 模板 C++:使用 typename 声明依赖类型
#include <vector>template<typename T>
class Container {
public:using Iterator = typename T::iterator;  // 必须用 typenamestatic Iterator begin(T& container) {return container.begin();}
};int main() {std::vector<int> vec = {1, 2, 3};auto it = Container<std::vector<int>>::begin(vec);return 0;
}
4. STL:迭代器按值传递
#include <vector>
#include <algorithm>// 迭代器按值传递(类似指针)
template<typename Iter>
void printFirstTwo(Iter begin, Iter end) {if (begin != end) {std::cout << *begin << " ";++begin;}if (begin != end) {std::cout << *begin << std::endl;}
}int main() {std::vector<int> nums = {10, 20, 30};printFirstTwo(nums.begin(), nums.end());  // 输出 "10 20"return 0;
}

关键总结

子语言典型场景参数传递规则
C 语言内置类型、指针、数组按值传递
面向对象 C++类、继承、虚函数const 引用传递
模板 C++泛型编程、元编程依赖类型用 typename
STL容器、迭代器、算法迭代器按值传递

编程启示:在切换子语言时(如从 STL 迭代器切换到面向对象),需同步切换编程策略,避免效率损失或错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916214.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云效CI/CD教程(PHP项目)

参考文档 参考云效的官方文档https://help.aliyun.com/zh/yunxiao/ 一、新建代码库 这是第一步&#xff0c;和码云的差不多 二、配SSH密钥 这个和码云&#xff0c;github上类似&#xff0c;都需要&#xff0c;云效的SSH密钥证书不是采用 RSA算法&#xff0c;而是采用了ED2…

单片机是怎么控制的

单片机作为电子系统的控制核心&#xff0c;通过接收外部信号、执行预设程序、驱动外部设备的方式实现控制功能&#xff0c;其控制过程涉及信号输入、数据处理和指令输出三个关键环节&#xff0c;每个环节的协同配合决定了整体控制效果。 信号输入&#xff1a;获取外部信息 单片…

deepseek本地部署,轻松实现编程自由

小伙伴们&#xff0c;大家好&#xff0c;今天我们来实现deepseek本地部署&#xff0c;轻松实现编程自由&#xff01;安装ollama 安装ollama 首先我们安装ollama 打开ollama官网&#xff0c;下载安装符合自己系统的版本。 找到要安装的模型deepseek-r1开始-运行 输入cmd出现…

基础NLP | 常用工具

编辑器 PycharmVSCodeSpyderPython 自带 ideVim 机器学习相关python框架 Pytorch 学术界宠儿&#xff0c;调试方便&#xff0c;目前的主流Tensorflow 大名鼎鼎&#xff0c;工程配套完善Keras 高级封装&#xff0c;简单好用&#xff0c;现已和Tensorflow合体Gensim 训练词向…

Unity3D + VR头显 × RTSP|RTMP播放器:构建沉浸式远程诊疗系统的技术实践

一、背景&#xff1a;远程医疗迈入“沉浸式协同”的新阶段 过去&#xff0c;远程医疗主要依赖视频会议系统&#xff0c;实现基础的远程问诊、会诊或术中指导。虽然初步解决了地域限制问题&#xff0c;但其单视角、平面化、缺乏沉浸感与交互性的特征&#xff0c;已无法满足临床…

海云安斩获“智能金融创新应用“标杆案例 彰显AI安全左移技术创新实力

近日&#xff0c;由中国人民银行广东省分行、广东省金融管理局、广东省政务服务和数据管理局指导&#xff0c;广东省金融科技协会主办的“智能金融 创新应用”优秀案例名单最终揭晓&#xff0c;海云安开发者安全助手系统项目凭借其创新的"AI安全左移"技术架构&#x…

Fluent许可与网络安全策略

在流体动力学模拟领域&#xff0c;Fluent软件因其卓越的性能和广泛的应用而备受用户青睐。然而&#xff0c;随着网络安全威胁的不断增加&#xff0c;确保Fluent许可的安全性和合规性变得尤为重要。本文将探讨Fluent许可与网络安全策略的关系&#xff0c;为您提供一套有效的安全…

如何借助AI工具?打赢通信设备制造的高风险之战?(案例分享)

你是否曾在项目管理中遇到过那种让人心跳加速的瞬间&#xff0c;当一项风险突然暴露出来时&#xff0c;全队似乎都屏住了呼吸&#xff1f;今天&#xff0c;我就来分享一个我亲历的项目案例&#xff0c;讲述我们如何借助具体的AI工具&#xff0c;实现从数据到决策的华丽转变&…

Web服务器(Tomcat、项目部署)

1. 简介 1.1 什么是Web服务器 Web服务器是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序员不必直接对协议进行操作&#xff0c;让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。 Web服务器是安装在服…

list 介绍 及 底层

list的相关文档&#xff1a;list - C Reference 一、list的介绍及使用 list中的接口比较多&#xff0c;此处类似&#xff0c;只需要掌握如何正确的使用&#xff0c;然后再去深入研究背后的原理&#xff0c;已达到可扩展的能力。以下为list中一些常见的重要接口。我们库里的list…

HCIP MGRE实验

一、实验要求 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有Ip地址; 2、 R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方&#xff1b; R2与R5之间使用PPP的CHAP认证&#xff0c;R5为主认证方; R3与R5之间使用HDLC封装; 3、R2、R3构建一…

基于PyTorch的多视角二维流场切片三维流场预测模型

基于PyTorch的多视角二维流场切片三维流场预测模型 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 计算流体动力学(CFD)在工程设计和科学研究中扮演…

全新轻量化PHP网盘搜索引擎系统源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 全新轻量化PHP网盘搜索引擎系统源码 基于PHPMYSQL开发 一、多样筛选功能&#xff1a;网站支持5类筛选功能&#xff0c;包括默认搜索、网盘类型、文件大小、时间排序以及网盘来源&#x…

C study notes[3]

文章目录operatonsloopsreferencesoperatons the fundamental operators such as ,-,* in C language can be simply manipulated. int sum 5 3; // sum 8 int difference 10 - 4; // difference 6 int product 6 * 7; // product 42the operator / was left to in…

练习实践-基础设施-文件共享-windows和linux之间的文件共享-smb服务搭建

参考来源&#xff1a; 在线书籍-linux就该这么学-第12章 安装软件包 配置文件/etc/samba/smb.conf 运维对待配置文件的态度&#xff0c;非必要不增加 安装完毕后打开Samba服务程序的主配置文件&#xff0c;好在参数并不多&#xff0c;只有37行。其中第17&#xff5e;22行代…

常用设计模式系列(十三)—组合模式

常用设计模式系列&#xff08;十三&#xff09;—组合模式 第一节 前言 hello大家好&#xff0c;今年已经过去了一半&#xff0c;年初立下的flag&#xff0c;不知道实现了没有&#xff0c;你的flag改了多少次&#xff1f;无论自己的愿望是否完成&#xff0c;我们都应该怀揣着追…

字节码操作工具——ByteBuddy应用(3)安全检查

一、检测方法名是否符合规范1、代码&#xff08;1&#xff09;MethodLoggerAgentpackage com.example.agent;import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatchers;import java.lang.instrument.…

NineData 数据库 DevOps 全面支持 GaussDB,国产化管理再升级!

NineData 数据库 DevOps 平台现已全面兼容 GaussDB 全线产品&#xff08;包括 GaussDB 企业级、DWS 数据仓库、openGauss 开源版&#xff09;&#xff0c;实现一站式管理。无论 GaussDB 实例部署在哪个环境&#xff0c;企业所有开发者都可以通过 NineData 统一访问&#xff0c;…

C++ - 模板进阶

一、非类型模板参数模板参数 分为 类型形参与 非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在 class 或者 typename 之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数…

【质量管理】软件缺陷管理实施方案(专业版)

引言 方案目标与范围 本方案以CMMI量化管理要求与ISO 9000质量体系为框架,核心目标是通过标准化缺陷管理流程实现缺陷全生命周期可控。具体包括:确保软件缺陷在全生命周期中被及时发现与修复,减少其对软件质量、发布计划及用户体验的负面影响;以“零缺陷”为首要目标,针对…