在函数中传递数组作为引用参数
Passing arrays as reference arguments in function
我试图将两个多维数组作为引用参数传递给c++中的函数。
原型是这样写的:
void func(char (&foo)[4][4], char (&bar)[4][4]);
我的问题是第二个参数没有作为引用参数传递,但是第一个参数传递了。如果我改变它们的位置——所以(&foo)[4][4]是第二个,反之亦然——foo不会作为引用传递,但bar会。
但是,如果我添加第三个参数,第二个参数将作为引用传递。
如何在不添加另一个无用参数的情况下解决这个问题?
通过使用typedefs:
来尽量减小脚的大小。typedef char charray44[4][4];
void foo(charray44 & one, charray44 & two);
这应该工作如预期;如果没有,您应该能够设置一个简单的测试工具来找出代码中哪里(否则)出错了。
void foo(char (&one)[4][4], char (&two)[4][4]){
}
int main(){
char one[4][4];
char two[4][4];
foo(one, two);
}
在MSVC, GCC和Clang上可以很好地编译。你的问题在别处
作为Xeos解决方案的补充,解决此问题的一个更好的方法可能是封装数组并通过引用传递新对象。
class matrix{
std::vector<char> values;
size_t x_sz, y_sz;
public:
matrix(size_t x, size_t y) : values(x*y), x_sx(x), y_sz(y) {}
char& get_at(size_t x, size_t y)
{ return values[y*x_sz+x]; }
const char& get_at(size_t x, size_t y) const
{ return values[y*x_sz+x]; }
};
则可以直接传递给。
void f(const matrix& a);
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用