C++0x中的表达式类型自动推导 |
发布: 2011-04-04 19:17 |
最近C++最新标准C++2011正式发布了,几乎同时,作为*nix平台标准编译器的GCC 4.6版本也正式发布。 对于想尝鲜的已经可以使用了。 今天遇到一个比较复杂的类型,与模板相关的,写了几次,都说变量的定义不对,想起来C++中有类型推导,翻了一下资料,找到了typeof(exp)这个东西,用起来方便多了。 但是正测试 -std=c++0x的时候又出了问题,再一查,原来有新的方式实现, typedef decltype(exp) TmpType; TmpType a; ... 由于要在不同环境下编译,新的方式在老的编译器环境不能用,老的方式在新的环境下不能,只好找了C的#if指令处理, #if ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) && __GXX_EXPERIMENTAL_CXX0X__) // typedef decltype(exp) 方式 #else // typeof(exp) 方式。 #endif 这样,在gcc版本足够高,并且在命令行使用-std=c++0x时,使用新的方式,其他情况都使用老的方式。 还有一种gcc扩展的方式__typeof__(exp),能很好的兼容这些不同的版本的问题,但这种方式不好看出来是使用的C++0x还是其他的,容易自己都不清楚,择机选用。 另外发现使用-std=c++0x时,同样的代码,编译出来的程序大一些。 测试环境,gcc 4.6, gcc 4.3 |
原文: http://qtchina.tk/?q=node/567 |
Powered by zexport
|