Có và không.
Nó phụ thuộc vào phiên bản C ++ mà bạn đang sử dụng.
- C ++ 98 và C ++ 03 không hỗ trợ
explicit
toán tử chuyển đổi kiểu
- Nhưng C ++ 11 thì có.
Thí dụ,
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
Biên dịch nó với g++ -std=c++0x
, bạn sẽ gặp lỗi này:
prog.cpp: 13: 20: error: chuyển đổi từ 'A' sang loại không vô hướng 'std :: string' được yêu cầu
Bản demo trực tuyến: http://ideone.com/DJut1
Nhưng ngay sau khi bạn viết:
std::string s = static_cast<std::string>(a);
Lỗi sẽ biến mất: http://ideone.com/LhuFd
BTW, trong C ++ 11, toán tử chuyển đổi rõ ràng được gọi là "toán tử chuyển đổi theo ngữ cảnh" nếu nó chuyển đổi thành boolean . Ngoài ra, nếu bạn muốn biết thêm về các chuyển đổi ẩn và rõ ràng, hãy đọc chủ đề này:
Hy vọng rằng sẽ giúp.
toString
, thay vì gọioperator std::string
. Tất nhiên, điều này có thể gây ra sự cố với một số mẫu. Tôi đã luôn sử dụngtoString
và nó chưa bao giờ gây ra bất kỳ vấn đề nào cho tôi, nhưng tôi tưởng tượng rằng điều này có thể phụ thuộc vào phong cách viết mã của bạn.