【发布时间】:2014-11-21 16:18:38
【问题描述】:
我有一门课是这样的
class HtmlRover
{
public:
HtmlRover(const std::string::const_iterator &, const std::string::const_iterator &);
~HtmlRover();
// ...
private:
/...
std::string::const_iterator _curIter;
const std::string::const_iterator _offend;
/...
};
我的编译器抱怨我在构造函数的实现中实例化了_offend:
HtmlRover::HtmlRover(const std::string::const_iterator & it1, const std::string::const_iterator & it2)
{
_curIter = it1;
_offend = it2;
}
上面写着
No vaiable overload "="
现在我知道这可能与将 const 变量设置为变量的引用有关,但又一次引用也是 const,那么有什么问题吗?我知道 const 变量不经过初始化就无法存在,但这也不应该成为问题,因为 _offend 正在初始化 HtmlRover 对象时被初始化。
【问题讨论】:
-
我没有尝试修复语法问题,而是首先问自己为什么 Rover 对象需要缓存迭代器。 en.wikipedia.org/wiki/Code_smell
-
+1用于问题标题,-1用于基于误解和错误编码风格(不使用初始化列表)的问题。 -
使用初始化列表,就像现在一样
_offend正在使用赋值运算符,这显然是不行的,因为它是 const。 -
@rubenvb:我知道旧标题有一个很好的头韵,但它几乎不是 PC。但我不想和你发生编辑大战,所以如果你对原始表单有强烈的感觉,就把它改回来。
-
@rubenvb 诚实的问题:为什么
-1是基于听起来像程序员缺乏经验的问题?如果我们对没有经验的代码投反对票并拒绝问题,那么我们就有点违背了 SO 的部分目的。
标签: c++