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
英文地址,請注明出處:http://en.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質量體系為框架,核心目標是通過標準化缺陷管理流程實現缺陷全生命周期可控。具體包括:確保軟件缺陷在全生命周期中被及時發現與修復,減少其對軟件質量、發布計劃及用戶體驗的負面影響;以“零缺陷”為首要目標,針對…