Wak*_*zil 4 c++ language-lawyer c++11
我不明白这个缺陷报告1207的原因,更具体地说是参考下面的句子(重点是我的):
因为将成员名称转换为类成员访问表达式(9.3.1 [class.mfct.non-static]段落3)仅发生在非静态成员函数的主体内部,所以尾随中的v的类型 - return-type是非const,但在返回表达式中是const,导致返回表达式和函数的返回类型之间的类型不匹配.
编辑
也就是说,我不明白为什么尾随返回类型中的v的类型被推断为非const.
vector v;
auto end() const -> decltype(v.begin()) { return v.begin(); }
Run Code Online (Sandbox Code Playgroud)
decltype(v.begin()),在尾返回型,是iterator-因为v有类型vector,从外部看到.
但是在函数体内部,end()会考虑成员函数的const-specifier .类型v是 - 的类型this->v- 反过来取决于的常数this.
this'pointee是const(由于前面提到的const-specifier),因此this成员函数内部的类型是block const*.
因此,this->v成员函数内部的类型是vector const(因为const访问路径),并且v.begin()- 实际上(this->v).begin()- 调用const返回类型为的-overload const_iterator.另一方面,v.begin()在trailing-return-type中"调用"返回的非const重载iterator.
那种类型的不一致就是问题所在.
它说的是,当拖尾返回类型解析,成员v中查找到足够使的感觉v.begin()..但实际访问到v在已经调用的情况下end()不考虑,所以既不是事实,end()(因此它的访问权限v是const.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |