Khám phá
Trả lời
Hỏi
Đăng nhập

Từ khóa explicit trong c++

explicit operator point();

explicit: sẽ cấm không cho trình dịch ép kiểu ngầm định.

Mình chưa rõ lắm về từ khóa explicit , bạn nào có thể giải thích hộ mình không?

  1. Bạn sẽ nhìn thấy những mũi tên trong mỗi trang câu hỏi. Chúng cho phép bạn bỏ phiếu thuận / bỏ phiếu chống theo sự liên quan của các câu hỏi / trả lời.
  2. Chỉnh sửa câu hỏi của bạn / câu trả lời nếu bạn muốn thay đổi hoặc cập nhật nó.
  3. Nếu bạn không hiểu điều gì đó về câu hỏi, để lại nhận xét hỏi. Những vùng cho câu trả lời chỉ được sử dụng cho câu trả lời.
  4. Nếu tác giả của một câu hỏi đánh dấu một câu trả lời như giải pháp, nhãn hiệu này sẽ được hiển thị.
  5. Nhấn vào đây để xem thêm chi tiết về những hoạt động của hệ thống!

1 trả lời

  • explicit thường dùng để ngăn chặn việc khởi tạo một object từ object (copy-initialization) khác loại hoặc bị ép kiểu ngầm implicit conversions).

    copy-initialization

    Đó là việc sử dụng hàm dựng để tạo object từ một object khác

    implicit conversions

    Ép kiểu ngầm định. Thường xuất hiện trong các phép gán giá trị cho biến, mà giá trị đó với biến khác kiểu dữ liệu.

    Để hiểu rõ hơn 2 vấn đề trên, bạn có thể xem xét ví dụ sau (nguồn):

    struct A
    {
        A(int) { }      // converting constructor
        A(int, int) { } // converting constructor (C++11)
        operator bool() const { return true; }
    };
    
    struct B
    {
        explicit B(int) { }
        explicit B(int, int) { }
        explicit operator bool() const { return true; }
    };
    
    int main()
    {
        A a1 = 1;      // OK: copy-initialization selects A::A(int)
        A a2(2);       // OK: direct-initialization selects A::A(int)
        A a3 {4, 5};   // OK: direct-list-initialization selects A::A(int, int)
        A a4 = {4, 5}; // OK: copy-list-initialization selects A::A(int, int)
        A a5 = (A)1;   // OK: explicit cast performs static_cast
        if (a1) ;      // OK: A::operator bool()
        bool na1 = a1; // OK: copy-initialization selects A::operator bool()
        bool na2 = static_cast<bool>(a1); // OK: static_cast performs direct-initialization
    
    //  B b1 = 1;      // error: copy-initialization does not consider B::B(int)
        B b2(2);       // OK: direct-initialization selects B::B(int)
        B b3 {4, 5};   // OK: direct-list-initialization selects B::B(int, int)
    //  B b4 = {4, 5}; // error: copy-list-initialization does not consider B::B(int,int)
        B b5 = (B)1;   // OK: explicit cast performs static_cast
        if (b2) ;      // OK: B::operator bool()
    //  bool nb1 = b2; // error: copy-initialization does not consider B::operator bool()
        bool nb2 = static_cast<bool>(b2); // OK: static_cast performs direct-initialization
    }

Không phải là câu trả lời bạn đang tìm kiếm? Tìm kiếm câu hỏi khác với các thẻ programming c hoặc hỏi câu hỏi mới.