为什么采用向量的方法不能采用自己输出的返回向量?
Why can't a method that takes a vector take the return vector of its own output?
我对传递向量的细微差异感到困惑
这是我程序的一部分
void print(vector<vector<char>>&field)
vector<vector<char>> bomb(vector<vector<char>>&field)
我遇到了一个情况,我不能做这样的事情
print((bomb(bomb(field)));
错误是
error: invalid initialization of non-const reference of type 'std::vector<std::vector<char> >&' from an rvalue of type 'std::vector<std::vector<char> >'
print(bomb(bomb(field)));
但是如果我在方法定义中添加const到
void print(const vector<vector<char>>&field)
vector<vector<char>> bomb(const vector<vector<char>>&field)
那么这将工作
1. vector<vector<char>> bomb(vector<vector<char>>&field)
3. vector<vector<char>> bomb(const vector<vector<char>>&field)
4. vector<vector<char>> bomb(const vector<vector<char>>field)
我相信1是通过引用传递一个向量,这是我以前做过的。为什么我不能做像bomb(bomb(field))这样的事情而不引起编译器的抱怨?
bomb
的返回值是对象,不是引用。返回值是一个临时对象。因此,当期望的类型是非const引用时,不能使用它。
与更简单对象的类比:
int foo(int& i) { return i+2; }
void bar(int& i) {}
// Can't use
int i = 10;
bar(foo(i));
这是一个问题,因为foo
返回一个临时对象。它的返回值不能用作bar
的参数,因为bar
需要一个非const引用。
如果bomb
的返回值可以更改为引用,
vector<vector<char>>& bomb(const vector<vector<char>>&field);
不破坏它的工作原理,那么你可以使用:
print((bomb(bomb(field)));
相关文章:
- 矩阵向量乘法(cublasDgemv)返回零
- C++中函数的向量返回类型引发错误
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 从对象的向量返回某个类的对象
- C++ 将向量中出现 n 次的所有元素作为向量返回
- 向量返回负大小 c++
- 如何从向量返回给定类型的元素?
- 将对象的向量返回到函数
- 尝试从向量返回对象时出现"没有可行的重载运算符 [] 错误
- 调用函数时,如何通过向量返回类型
- 向量返回/加法算法的问题
- 在向量返回上移动语义行为
- 从int c++的向量返回一个无符号长
- 向量返回空 C++
- 从融合向量的std向量返回列,无需复制
- C++为空向量上的向量返回什么::back()
- 函数的向量返回
- 如何用适当的OO有效地将100万的私有向量返回给其他几个类