读书人

关于decltype的标准语义,该如何解决

发布时间: 2012-10-18 13:46:56 作者: rapoo

关于decltype的标准语义
std::vector<int> v;
...
const decltype(v.front())& item = v.front();

上面的代码在vc下面编译很好,但在gcc(最新版本)下却编译不过(去掉const才行),请问标准是什么?
到底是谁不标准?

[解决办法]
使用const_cast<>()
[解决办法]

C/C++ code
int a = 0;int & const b = a; // error: 'const' qualifiers cannot be applied to 'int&'
[解决办法]
探讨

虽然VC有很多标准上的BUG。但是这点VC比GCC符合标准。

const decltype(v.front())& item = v.front();

注意。item也并不会是const int&。而是int&。

最方便的方法还是乖乖的auto或者T::value_type

[解决办法]
那我建议你老老实实使用C++2003标准语法。
C++ boost本来已是怪兽,你这样做,是放出了C++2011恶魔。
很简单的事情,你偏要去复杂化。
用最简单的方法解决,才是艺术化。
[解决办法]
最后得到是不是const的 取决于decltype(client_vec.front()) 中的client_vec是不是const的。
因此这并不影响你写这个lambda。所以没必要纠结这个问题。

如果实在弃不了const-ref的情结。还可以
const std::remove_reference<decltype(v.front())>::type &

但是你说
>>可是我的代码必须支持vc2010!

我觉得就凭这句,可以结束该贴了
[解决办法]
vs2010对decltype支持有点问题

我经常用到编译器崩溃。。。

出问题还是换句话写吧

读书人网 >C++

热点推荐