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

Từ khóa explicit trong C++: ngăn chặn chuyển đổi ngầm


Constructor một đối số (hoặc các đối số sau có default) tự động trở thành conversion constructor, cho phép ép kiểu ngầm. explicit ngăn chặn điều này.

Không dùng explicit

class Point { double x,y;
public: Point(double a=0, double b=0):x(a),y(b) {}
bool operator==(Point p) { return x==p.x && y==p.y; }
};
Point p(5,0);
if (p == 5) cout << "Same"; // OK: 5 → Point(5,0) ngầm

Dùng explicit

class Point {
    explicit Point(double a=0, double b=0):x(a),y(b) {}
    // ...
};
if (p == 5) // LỖI: no match for operator==(Point, int)
if (p == (Point)5) // OK: ép kiểu tường minh

Lưu ý: C++11 cho phép explicit cho conversion operators.