ใช่และไม่.
ขึ้นอยู่กับเวอร์ชันของ C ++ ที่คุณใช้
- C ++ 98 และ C ++ 03 ไม่รองรับ
explicit
ตัวดำเนินการแปลงชนิด
- แต่ C ++ 11 ทำ
ตัวอย่าง,
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
รวบรวมด้วยg++ -std=c++0x
คุณจะได้รับข้อผิดพลาดนี้:
prog.cpp: 13: 20: ข้อผิดพลาด: ขอการแปลงจาก 'A' เป็นประเภทที่ไม่ใช่สเกลาร์ 'std :: string'
การสาธิตออนไลน์: http://ideone.com/DJut1
แต่ทันทีที่คุณเขียน:
std::string s = static_cast<std::string>(a);
ข้อผิดพลาดหายไป: http://ideone.com/LhuFd
BTW, ใน C ++ 11 ผู้ประกอบการแปลงอย่างชัดเจนจะเรียกว่าเป็น"ผู้ประกอบการแปลงบริบท"ถ้ามันจะแปลงไปเป็นแบบบูล นอกจากนี้หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการแปลงโดยนัยและชัดเจนโปรดอ่านหัวข้อนี้:
หวังว่าจะช่วยได้
toString
operator std::string
แน่นอนว่าสิ่งนี้อาจทำให้เกิดปัญหากับบางเทมเพลต ฉันใช้มาตลอดtoString
และมันไม่เคยทำให้ฉันมีปัญหา แต่ฉันคิดว่าสิ่งนี้อาจขึ้นอยู่กับรูปแบบการเข้ารหัสของคุณ