retweet

C++ switch的秘密

呵呵,有点标题党的感觉。其实不算什么秘密吧。 C++的switch只支持整型表达式、以及可以转化成整型的表达式。这是什么意思呢? 这是说,switch不支持字符串、数组、浮点数。 支持整型,包括short / unsigned short / int / unsigned int/ long / unsigned long 此外,还有long long和unsigned long (如果编译器支持long long的话) 。

除了整型,如果一个变量或表达式可以转化成整型,那么switch也支持,例如:

class A{ public: A() : _i(0), _c('a'), _l(2L) {} operator int () { return _i; } //从class A到int的类型转换操作符 private: int _i; char _c; long _l; }; int main() { A a; switch(a) //a转换成int类型,返回i { case 0: printf("0\n"); break; case 'a': printf("a\n"); break; case 5L: printf("5L\n"); break; } return 0; } 不过有趣的是,如果象下面这样,定义了多个类型转换操作符,则引起二义性错误:
class A{ public: A() : _i(0), _c('a'), _l(2L) {} operator int () { return _i; } operator char() { return _c; } operator long() { return _l; } private: int _i; char _c; long _l; }; int main() { A a; switch(a) // error C2450: switch expression of type 'class A' is illegal { //Ambiguous user-defined-conversion //二义性错误 case 0: printf("0\n"); break; case 'a': printf("a\n"); break; case 5L: printf("5L\n"); break; } return 0; }
--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢

本文地址: http://www.dulao5.com/cpp/2006/12/02/Cpp-switch-and-type-convert.textile