Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khởi tạo đồng nhất (Uniform Initialization) trong C++

Từ C++11, Uniform Initialization (khởi tạo đồng nhất) cung cấp cú pháp nhất quán dùng cặp ngoặc nhọn {} để khởi tạo mọi loại biến/đối tượng: từ kiểu nguyên thủy đến aggregate, class, container.

Cú pháp chung

type var_name{arg1, arg2, ..., argN};

Các trường hợp ứng dụng

1. Khởi tạo mảng cấp phát động

int* pointer = new int[5]{10, 20, 30, 40, 50};

2. Khởi tạo mảng thành viên của class

class MyClass {
    int arr[3];
public:
    MyClass(int p, int q, int r) : arr{p, q, r} {}
    void display() {
        for (int c = 0; c < 3; c++) cout << arr[c] << ", ";
    }
};

3. Trả về đối tượng ngầm (implicit return)

MyClass func(int p, int q) {
    return {p, q}; // tự động gọi constructor MyClass(int, int)
}

4. Tham số hàm khởi tạo ngầm

void func(MyClass p) { p.display(); }
int main() { func({40, 50}); } // tạo MyClass tạm thời

Lưu ý quan trọng

  • Hẹp chuyển đổi (narrowing conversion) bị cấm: int x{3.14}; lỗi compile.
  • Ưu tiên initializer_list constructor nếu class có.
  • Giúp tránh "Most Vexing Parse" (khái niệm hàm vs đối tượng).

Kết quả các ví dụ

The contents of array are: 10 20 30 40 50
The contents are: 40, 50, 60,
(40, 50)
(40, 50)

Tóm lại: Uniform initialization làm mã C++ nhất quán, an toàn và hiện đại hơn.