这:
void foo(int &&r) {
std::cout << r << std::endl;
}
int main() {
int i = 2;
foo(std::move(i));
i = 3; //no warning. any way to get some warnings here?
return 0;
}
如果我在移动变量后不小心使用了变量,有没有办法告诉编译器给我一个错误(或警告)?我想这会很方便。很多时候,我发现自己像那样将变量移动到其他地方,但是我必须手动非常小心,以后不要使用它们。现在这还没有造成任何问题,但谁知道呢……最好是安全的!
也许存在一些预处理器技巧(或相当广泛可用的编译器扩展)来做这些事情?
更现实的例子:
struct HugeStorage {
std::vector<double> m_vec;
HugeStorage(std::vector<double> vec) : m_vec(std::move(vec)) { }
};
struct SmallStorage {
std::vector<double> m_vec;
SmallStorage(std::vector<double> vec) : m_vec(std::move(vec)) { }
};
std::vector<double> vec_from_data_source() {
return std::vector<double>(); //only example!!
}
int main() {
std::vector<double> vec = vec_from_data_source();
if (vec.size() > 10000)
{
HugeStorage storage(std::move(vec));
//do some things, but I gotta be careful I don't do anything to vec
}
else
{
SmallStorage storage(std::move(vec));
//do some things, but I gotta be careful I don't do anything to vec
}
return 0;
}