在C++中,運算子 << 可以有不同的含義,這取決於它的上下文使用。主要有兩種用法:
左移運算子 (Bitwise Left Shift Operator):在位操作中,<< 用於將數字的位元模式向左移動指定的位數。左邊的位被丟棄,右邊則填充零。這個操作等價於將數字乘以 2 的指定次方。
例子:
int a = 5; // 二進位表示為 101
int b = a << 1; // b 現在是 10,二進位表示為 1010
這裡 a << 1 將 a 的位元模式向左移動了一位,產生了一個新值。
插入運算子 (Stream Insertion Operator):在I/O流中,<< 被重載為插入運算子。當用於std::ostream類(例如 std::cout)時,它將其右側的值或物件插入到輸出流中。
例子:
cpp
Copy code
std::cout << "Hello, world!" << std::endl;
這裡,字串 "Hello, world!" 被插入到標準輸出流 std::cout,隨後是插入 std::endl(這會輸出換行並刷新流)。
另外,<< 運算子也可以被用戶自定義重載,給它賦予在特定類別上的特殊含義。這是實現運算子多載的一部分,允許開發者定義類型如何響應標準運算子。例如,你可以重載 << 來打印出自定義類型的物件。
cpp
Copy code
class MyClass {
public:
int x;
explicit MyClass(int val) : x(val) {}
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
os << obj.x;
return os;
}
};
MyClass obj(10);
std::cout << obj; // 會輸出 obj.x,即數字 10
在這個例子中,<< 被重載為一個函數,使得 MyClass 的實例可以被插入到 std::ostream 流中,如同它是一個內置數據類型一樣。這種用法擴展了 << 的功能,使其成為一個多樣化且強大的工具在C++語言中。