2024年11月20日 星期三

在 C++ 中,<> 符號的主要功能

1. 模板 (Template)

<> 用於模板的語法中。模板是 C++ 中的一個重要特性,允許編寫泛型程式碼,即根據不同的類型進行相同的操作。

類模板 (Class Template): 定義一個泛型類,可以根據類型的不同進行實例化。 函數模板 (Function Template): 定義一個泛型函數,可以根據傳遞的參數類型進行實例化。 範例:

// 函數模板
template <typename T>
T add(T a, T b) {
    return a + b;
}

// 類模板
template <typename T>
class Box {
public:
    T value;
    Box(T val) : value(val) {}
};
在這裡,<typename T> 用來指示模板參數,T 是一個占位符,可以在實際使用模板時指定具體的類型。

用法:
int main() {
    int sum = add(3, 5);  // T 被推斷為 int
    Box<int> myBox(10);    // T 被指定為 int
}

2. STL 容器或類型參數

在使用 C++ 標準庫中的模板類型時,<> 用來指定容器或類型的具體類型參數。比如,使用 std::vector 或 std::map 時,你需要指定容器的類型。

範例:

#include <vector>
#include <map>

int main() {
    std::vector<int> numbers;       // 使用 int 類型的 vector
    std::map<std::string, int> age; // 使用 string 作為 key,int 作為 value 的 map
}
在這些例子中,<> 用來指定容器中元素的類型。

3. 空的模板參數列表 (Empty Template Parameter List)

在某些情況下,<> 可以是空模板參數的符號,表示模板沒有類型參數。

範例:

template <>
class MyClass<int> {
public:
    void display() { std::cout << "Specialized version for int" << std::endl; }
};

在這個例子中,<> 表示這是一個專門針對 int 類型的模板特化。

4. 在類型推導中的使用(C++11 之後)

在 C++11 和更高版本中,<> 也可以用於模板類型推導中,尤其是在 auto 和 decltype 等語法結構中。

範例:

auto x = std::vector<int>{1, 2, 3};  // C++11 型別推導
在這裡,std::vector<int>{1, 2, 3} 使用了模板類型推導,auto 會自動推導出 x 的類型是 std::vector<int>。

5. 在 std::initializer_list 中使用

<> 也可以在使用初始化列表(std::initializer_list)時出現。

範例:

std::initializer_list<int> list = {1, 2, 3, 4};

沒有留言:

張貼留言