Yes and No.
It depends on which version of C ++ you are using.
- C ++ 98 and C ++ 03 do not support
explicit type conversion operators - But C ++ 11. does.
Example
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 }
Compile it with g++ -std=c++0x , you will get this error:
prog.cpp: 13: 20: error: conversion from "A" to the non-scalar type "std :: string" requested
Online demo: http://ideone.com/DJut1
But as soon as you write:
std::string s = static_cast<std::string>(a);
The error goes away: http://ideone.com/LhuFd
BTW, in C ++ 11, an explicit conversion operator is called a โcontextual conversion operator" if it is converted to a logical one. Also, if you want to know more about implicit and explicit conversions, read this topic:
- Implicit VS Explicit Conversion
Hope this helps.
Nawaz Nov 23 '11 at 8:55 2011-11-23 08:55
source share