下面是一个例子:
#include <vector>
#include <iterator>
class Foo {
public:
void combine(std::vector<std::vector<float>> &all_data) const {
all_data.insert(all_data.end(), std::make_move_iterator(data_.begin()),
std::make_move_iterator(data_.end()));
}
private:
std::vector<std::vector<float>> data_;
};
字符串
问题是它在没有任何警告的情况下编译,而const
+ std::make_move_iterator(not_volatile_data_member)
在我看来应该失败。
为什么它不是编译时错误,我如何防止将来发生这样的错误?
编辑:
我想编译错误,如果数据成员(data_
)的数据不能移动,我得到的是复制而不是移动,而我明确地告诉编译器,我想通过make_move_iterator
移动。
1条答案
按热度按时间6ioyuze21#
如果你真的想这么做,并且只是想检测
const
s的问题。它可以通过添加自己的 Package 器来实现。字符串
然而,我强烈反对这样做,因为它不能防止许多其他类似的常见错误,而且还会让碰巧读过你的代码的人更加困惑。