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

Biến inline trong C++17 hoạt động như thế nào?


Trong C++, từ khóa inline dùng cho hàm. Từ C++17, khái niệm biến inline được giới thiệu.

Biến inline cho phép định nghĩa ở nhiều đơn vị dịch (translation units) và tuân theo quy tắc One Definition Rule (ODR). Nếu được định nghĩa nhiều lần, trình biên dịch sẽ gộp chúng thành một đối tượng duy nhất trong chương trình cuối cùng.

Trước C++17, không thể khởi tạo biến thành viên static trực tiếp trong class, buộc phải định nghĩa ở ngoài.

Ví dụ trước C++17

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() { ++num; }
    ~MyClass() { --num; }
    static int num;
};

int MyClass::num = 10; // định nghĩa ngoài class

int main() {
    cout << "Giá trị static: " << MyClass::num;
}

Kết quả

Giá trị static: 10

Ví dụ C++17 với inline static

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() { ++num; }
    ~MyClass() { --num; }
    inline static int num = 10; // khởi tạo ngay trong class
};

int main() {
    cout << "Giá trị static: " << MyClass::num;
}

Kết quả

Giá trị static: 10