Có và không
Tùy thuộc vào phiên bản C++ bạn đang sử dụng.
- C++ 98 và C++ 03 không hỗ trợ
explicit
loại nhà khai thác chuyển đổi
- Nhưng C++ 11 không.
Ví dụ,
struct A
{
//implicit conversion to int
operator int() { return 100; }
//explicit conversion to std::string
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a; //ok - implicit conversion
std::string s = a; //error - requires explicit conversion
}
Biên dịch nó với g++ -std=c++0x
, bạn sẽ nhận được lỗi này:
prog.cpp:13:20: error: conversion from 'A' to non-scalar type 'std::string' requested
online demo: http://ideone.com/DJut1
Nhưng ngay khi bạn viết:
std::string s = static_cast<std::string>(a); //ok - explicit conversion
Các lỗi sẽ biến mất: http://ideone.com/LhuFd
BTW, trong C++ 11, các nhà điều hành chuyển đổi rõ ràng được gọi là "điều hành theo ngữ cảnh chuyển đổi" nếu nó chuyển thành boolean. Ngoài ra, nếu bạn muốn biết thêm về chuyển đổi ngầm và rõ ràng, đọc chủ đề này:
Hy vọng rằng sẽ giúp.
+1. Có thể đăng một ví dụ về mã C++ 11 không? – FailedDev
@FailedDev: Xong. :-) – Nawaz
Cảm ơn rất tốt! – FailedDev