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

C++ 變數型別完整指南:基本型別、宣告定義、左值右值、型別推導與現代實務

     編輯:C++ 入門

C++ 變數型別完整指南:基本型別、宣告定義、左值右值與現代實務

變數 是具名儲存區,具備型別(決定大小、配置、解讀)、名稱(標識符)、作用域與生命週期。

基本內建型別

類別關鍵字典型大小說明
布林bool1 bytetrue/false
字元char1 byteASCII/UTF-8 碼點
寬字元wchar_t2/4 bytes平台相關
整數short, int, long, long long2/4/4/8 bytes至少 16/32/32/64 位
浮點數float, double, long double4/8/8-16 bytesIEEE 754 單/雙/擴展精度
無型別voidN/A不完整型別,用於指標/回傳

確切大小用 sizeof(T) 查詢,包含 <cstdint> 使用固定寬度型別 int32_t, uint64_t 等。

變數宣告與定義

  • 宣告:引入名稱與型別,不配置儲存空間 (除非有初始化式)。extern int x;
  • 定義:配置儲存空間,可選初始化。int x = 10;
  • 一個程式中宣告可多,定義只能一 (ODR 原則)。
  • 跨檔案共享:標頭檔宣告 (extern),來源檔定義。

初始化語法演進


// C++98
int x = 10;
int y(20);

// C++11 統一初始化 (列表初始化)
int a{10};
int b{};
double c{3.14};
vector v{1,2,3};  // 避免窄化轉換

// C++11 auto 型別推導
auto d = 10;       // int
auto e = 3.14;     // double
auto f = {1,2};    // initializer_list

統一初始化 { } 可防窄化轉換 (int x{3.14} 編譯錯誤)、統一語法、適用所有型別。

左值與右值

屬性左值右值
定義表達式指向可識別記憶體位置非左值的表達式 (暫時值、字面常數、運算結果)
可出現位置賦值號左/右兩側僅賦值號右側
可取址是否
範例變數、解參考、前置++、函數回傳參考字面常數、算術表達式、後置++、函數回傳值

C++11 引入右值參考 T&&,實現移動語意與完美轉發,區分 std::move(x) (轉右值) 與 std::forward。

現代 C++ 型別系統增強

  • auto / decltype:型別推導,減少冗長聲明。
  • std::nullptr_t:空指標字面常數型別,取代 NULL/0。
  • std::byte (C++17):原始位元組型別,非字元、非整數,用於低層記憶體操作。
  • enum class (C++11):強型別枚舉,作用域限定、不可隱性轉換整數。
  • using 別名宣告:using Vec = vector; 取代 typedef,支援模板別名。

常見陷阱與建議

陷阱建議
未初始化區域變數統一初始化 T x{};,啟用警告
有號/無號混用比較避免混用,或顯式轉換
隱性窄化轉換用 {} 初始化觸發編譯錯誤
巨集定義常數改用 constexpr/const
typedef 難讀改用 using 別名

總結

  • 掌握基本型別大小與範圍,善用 <cstdint> 固定寬度型別。
  • 區分宣告/定義,跨檔案正確使用 extern。
  • 理解左值/右值是移動語意基石,配合 std::move/std::forward。
  • 擁抱 auto、{}、using、enum class 現代語法,寫出型別安全、可維護程式碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved