首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 基礎進階:命名空間、函數重載、默認參數、auto、new/delete 全景解析

     編輯:關於C++

命名空間:大型項目防衝突利器

  • 定義/嵌套/擴展:namespace A { namespace B { int x; } }、同名命名空間可分散定義合併。
  • 別名:namespace short = very_long_name;。
  • using 指令/聲明:using namespace A;(引入所有)、using A::x;(引入單個)。注意作用域與衝突解決(A::x)。
  • 未命名命名空間:namespace { ... } 替代 static 限制文件內可見性。

函數重載:編譯期多態

  • 規則:同作用域、同名、參數列表不同(個數/類型/順序),與返回值無關。
  • 原理:Name Mangling(名字修飾)生成唯一符號,如 _Z3goi、_Z3god。
  • 函數指針區分重載:void(*p1)(int)=go; void(*p2)(double)=go;。

默認參數:簡化調用

  • 規則:默認參數必須靠右,中間不能有無默認值參數。
  • 原理:調用時編譯器自動補全參數,入棧順序右至左。
  • 聲明處給默認值,定義處不重複;虛函數默認值靜態綁定(基類指針調用派生類虛函數用基類默認值)。

auto 關鍵字:類型推導

  • C++11:變量定義時根據初始值推導類型(auto x = 3.14; // double)。
  • 範圍 for 循環:for (auto& x : vec) 自動推導元素類型,僅適用於數組/容器(有 begin/end)。
  • 不可用於函數參數、返回類型(C++14 起可用 auto 返回類型推導)。

new/delete:動態內存管理

操作語法關鍵點
單對象T* p = new T; delete p;調用構造/析構,拋出 bad_alloc 失敗
對象數組T* p = new T[n]; delete[] p;必須用 delete[],否則未定義行為
定位 newnew (buf) T;在預分配緩衝區構造,不分配內存
重載 new/delete類內 static void* operator new(size_t)攔截分配/釋放,可加統計、池化、對齊

關鍵區別:new vs malloc

  • new:類型安全、調用構造函數、可重載、拋出異常。
  • malloc:返回 void*、僅分配原始內存、需轉型、返回 NULL 表示失敗。
  • 兩者不可混用:new 配 delete,malloc 配 free。

最佳實踐

  • 現代 C++ 優先用智能指針(unique_ptr, shared_ptr)、容器管理內存,極少直接裸 new/delete。
  • 命名空間組織代碼層級:公司/專案/模塊,避免全局污染。
  • 重載配合默認參數時避免歧義(如 f(int) 和 f(int, int=0) 會衝突)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved