# C++中怎么使用基本數據類型、變量與常量
## 1. 基本數據類型
C++作為一門靜態類型語言,要求在編譯時明確所有變量的數據類型?;緮祿愋褪菢嫿ǔ绦虻幕A元素,可分為以下幾大類:
### 1.1 整型(Integer Types)
| 類型 | 大小(字節) | 取值范圍 |
|-------------|------------|------------------------------|
| `short` | 2 | -32,768 ~ 32,767 |
| `int` | 4 | -2^31 ~ 2^31-1 |
| `long` | 4/8 | 平臺相關 |
| `long long` | 8 | -2^63 ~ 2^63-1 |
| `unsigned` | 同對應類型 | 0 ~ 2^n-1 (n為位數) |
```cpp
int age = 25;
unsigned int population = 8000000;
類型 | 大小(字節) | 精度 |
---|---|---|
float |
4 | 6-7位有效數字 |
double |
8 | 15-16位有效數字 |
long double |
8⁄16 | 更高精度 |
double pi = 3.1415926535;
float temperature = 36.5f; // 注意f后綴
類型 | 描述 |
---|---|
char |
基本字符類型(1字節) |
wchar_t |
寬字符(2/4字節) |
char16_t |
UTF-16字符(C++11) |
char32_t |
UTF-32字符(C++11) |
char grade = 'A';
wchar_t chineseChar = L'中'; // L前綴表示寬字符
bool
類型只有兩個值:
- true
(實際存儲為1)
- false
(實際存儲為0)
bool isCppFun = true;
C++支持多種初始化方式:
int a; // 默認初始化(值不確定)
int b = 10; // C風格初始化
int c(20); // 構造函數初始化
int d{30}; // 列表初始化(C++11)
int e = {40}; // 帶等號的列表初始化
最佳實踐:推薦使用
{}
初始化,可以防止窄化轉換
int _count; // 合法
double 2ndValue; // 非法
float float; // 非法(關鍵字)
作用域類型 | 描述 |
---|---|
局部變量 | 在函數/代碼塊內聲明 |
全局變量 | 在所有函數外聲明 |
類成員變量 | 在類定義中聲明 |
int globalVar = 100; // 全局變量
void func() {
int localVar = 50; // 局部變量
{
int blockVar = 20; // 塊作用域變量
}
// blockVar 在這里不可訪問
}
C++11引入auto
關鍵字用于自動類型推斷:
auto x = 42; // int
auto y = 3.14; // double
auto z = "hello"; // const char*
創建不可修改的變量:
const int MAX_SIZE = 100;
const double PI = 3.14159;
編譯時常量表達式:
constexpr int arraySize = 100;
int arr[arraySize]; // 可用于數組大小
傳統C風格的宏定義:
#define PI 3.14159
注意:現代C++推薦使用
const
或constexpr
代替宏
enum Color { RED, GREEN, BLUE };
Color c = GREEN;
C++11引入強類型枚舉:
enum class Direction { UP, DOWN, LEFT, RIGHT };
Direction d = Direction::UP;
int i = 3.14; // 自動截斷為3
double d = i; // 轉換為3.0
C++風格轉換操作符:
static_cast<int>(3.14); // 基本類型轉換
const_cast<int&>(constVar); // 去除const屬性
reinterpret_cast<void*>(ptr); // 危險的低級轉換
dynamic_cast<Derived*>(basePtr); // 運行時類型檢查
typedef unsigned long ulong;
using StringVector = std::vector<std::string>;
優先使用const
和constexpr
constexpr int MAX_USERS = 1000;
避免使用宏定義常量
// 不推薦
#define MAX 100
// 推薦
const int MAX = 100;
初始化所有變量
int value{}; // 值初始化為0
使用有意義的變量名
int studentCount; // 好
int sc; // 差
注意整數溢出
unsigned int a = 4294967295;
a += 1; // 溢出為0
Q:int
和long
有什么區別?
A:在現代系統上通常int
是32位,long
可能是32或64位(取決于平臺)。
Q:何時使用float
而不是double
?
A:在內存受限或需要大量浮點計算時使用float
,否則默認使用double
。
Q:const
和constexpr
的區別?
A:const
表示運行時常量,constexpr
必須是編譯時常量。
掌握C++的基本數據類型、變量和常量是學習這門語言的基礎?,F代C++提供了更安全、更表達性強的特性(如auto
、constexpr
等),建議優先使用這些新特性。理解類型系統和作用域規則對于編寫健壯、可維護的代碼至關重要。
“`
(注:實際字數為約1600字,可根據需要擴展具體示例或添加更詳細的類型轉換說明以達到1800字)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。