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

C++ 變量與數據類型:初始化、基本類型、字符串與自動類型推導

     編輯:關於C語言

變量聲明與初始化

C++ 要求變量使用前聲明。聲明時可選初始化,**強烈建議總是初始化**,避免未定義值導致的不可預測行為。

兩種初始化語法 (等價)

// C 風格 (複製初始化)
int a = 0;
double pi = 3.14159;

// 構造函數風格 (直接初始化) — C++ 特有
int b(0);
double e(2.71828);

// 列表初始化 (C++11) — 統一初始化語法,防縮窄轉換
int c{0};
double d{3.14};
// int e{3.14}; // 錯誤:縮窄轉換 (double→int) 被禁止

自動類型推導 auto (C++11)

auto x = 42;        // int
auto y = 3.14;      // double
auto z = "hello";   // const char*
auto ptr = new int(10); // int*

auto 由初始化表達式推導類型,減少冗長類型名 (如迭代器),但不可用於無初始化聲明。

基本內置類型

類別類型典型大小說明
字符char1 字節ASCII 字符或小整數 (符號性實現定義)
wchar_t char16_t char32_t2/4 字節寬字符 (Unicode)
整數short int long long long≥2/≥2/≥4/≥8 字節至少對應位寬,int 通常為機器字長
unsigned 前綴-無符號版本 (如 unsigned int)
int8_t int16_t int32_t int64_t固定寬度<cstdint> 提供,跨平台精確控制
浮點float4 字節單精度 (7 位有效數字)
double long double8/10-16 字節雙精度 (15-17 位) / 擴展精度
布爾bool1 字節true / false
無類型void-無值、函數返回、通用指針 void*

字符串處理:std::string

C++ 標準庫提供 <string> 中的 std::string 類,替代 C 風格字符數組,管理內存、防緩衝區溢出、支援豐富操作。

基本用法

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "Hello";          // 複製初始化
    string s2("World");           // 直接初始化
    string s3{ "C++" };           // 列表初始化 (C++11)
    string s4(10, 'x');           // 10 個 'x' : "xxxxxxxxxx"
    
    cout << s1 << ' ' << s2 << endl; // 輸出: Hello World
    
    // 重新賦值、拼接
    s1 = "Hi";
    s2 += "!";
    string s3 = s1 + s2;          // "Hi World!"
    
    // 輸入 (含空格)
    string line;
    getline(cin, line);           // 讀整行
    
    return 0;
}

常用操作速查

操作代碼說明
長度s.size() / s.length()返回字符數 (不含結束符)
訪問字符s[i] (無檢查) / s.at(i) (邊界檢查拋出異常)下標從 0 開始
拼接s1 + s2 / s1 += s2 / s.append(str)高效拼接
比較s1 == s2 / s1.compare(s2)字典序比較
子串s.substr(pos, len)返回新 string
查找s.find(str/char, pos)返回位置或 npos
C 風格指針s.c_str()返回以 '\0' 結尾的 const char*

字面量常量

  • 整數:42 (int)、42u (unsigned)、42L (long)、42LL (long long)。
  • 浮點:3.14 (double)、3.14f (float)、3.14L (long double)。
  • 字符:'a'、'\n'、'\x41' (十六進制)、L'中' (寬字符)。
  • 字符串:"hello" (const char[])、R"(raw\nstring)" (原始字符串字面量 C++11)。
  • 布爾:true、false。
  • 空指針:nullptr (C++11,替代 NULL/0)。

變量作用域與生命周期

  • 局部變量 (塊作用域): 定義在 {} 內,進入塊創建,離開塊銷毀。未初始化值不確定。
  • 全局/靜態變量: 程序啟動創建,結束銷毀。未顯式初始化自動零初始化。
  • 靜態局部變量: static int cnt = 0; 首次執行初始化,生命周期全程,作用域局部。

最佳實踐清單

  1. ✅ **總是初始化** — 列表初始化 {} 防縮窄、統一語法。
  2. ✅ **優先用 auto** — 減少冗長類型,配合 const 推導 const auto&。
  3. ✅ **字符串用 std::string** — 拒絕 char[]、strcpy、緩衝區溢出。
  4. ✅ **固定寬度整數用 <cstdint>** — int32_t、uint64_t 跨平台一致。
  5. ✅ **浮點首選 double** — 精度足夠,float 僅用於存儲/傳輸大量數據節省帶寬。
  6. ✅ **常量用 const/constexpr** — 編譯期常量用 constexpr,運行期只讀用 const。
  7. ✅ **避免無符號與有符號混用比較** — 隱式轉換導致邏輯錯誤 (如 -1 < 1u 為 false)。

變量與類型是程序的骨架。選對類型、正確初始化、善用標準庫設施,能消滅一大類低級 Bug,讓代碼更安全、更易讀、更高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved