c++ - Specific things with type cast operator -
#include <iostream> using namespace std; struct { a(int a):a(a){} int a; }; struct b { operator a() { return 10; } }; int main() { b b; cout << ((a)b).a << endl; return 0; } this code compiles , prints 10 in visual studio. in wikipedia next cast operator found sentence: note: user-defined conversions, return type implicitly and necessarily matches operator name.
now how code above works? feature of visual studio? or shoud match implicitly?
operator a() user-defined conversion operator. it's job return a by-value when cast b a.
your operator a() function returning literal integer value, 10. operator a needs return a, a's convert constructor called value 10. results in temporary a being constructed. accessing .a on temporary object, , inserting value of .a in stream, results in seeing 10 on screen.
edit
when wiki said converstion operator "implicitly" returned a, meant don't have specify return type in function declarion. it's a , there's nothing can it.
when wiki said "necesarrily" returned a meant can't return a. can't return convertible a. has return a exactly.
Comments
Post a Comment