C++ 具有犰狳可选参数的函数

C++ 具有犰狳可选参数的函数,c++,function,armadillo,C++,Function,Armadillo,我需要构建一个带有可选参数的函数。似乎我应该给参数一个默认值。例如,当可选参数类型为double或integer时,这种方法非常有效。我可以将默认值设置为0或NULL。但假设可选参数是犰狳矩阵。我不知道如何定义空矩阵。我检查了这个代码,但它不工作 mat test(mat& X, mat& Y = zeros(2,2).clear()){ if(Y.empty()){return X;} return X*Y; } 我想将Y的默认值设置为空(或空)矩阵。然后

我需要构建一个带有可选参数的函数。似乎我应该给参数一个默认值。例如,当可选参数类型为double或integer时,这种方法非常有效。我可以将默认值设置为0或NULL。但假设可选参数是犰狳矩阵。我不知道如何定义空矩阵。我检查了这个代码,但它不工作

  mat test(mat& X, mat& Y = zeros(2,2).clear()){
  if(Y.empty()){return X;}
    return X*Y;
  }

我想将Y的默认值设置为空(或空)矩阵。然后我可以使用if命令检查Y是否为空

我想你想要的
是空的
而不是
空的

成员函数重置是使矩阵为空。但我怀疑默认构造的矩阵也是空的

但是,您有一个更大的问题-您通过非常量引用传递参数Y,因此根本不能使用临时表达式作为默认参数。(通过常量引用传递会更糟糕,因为最终会得到一个悬空引用。)我建议通过值传递,或者通过常量引用并为空矩阵定义一个静态常量:

mat const Empty = mat();
mat test(mat const & X, mat const & Y = Empty) { ... }


谢谢你的回复。第一个代码可以工作,但是当我调用test(x)时,我得到一个错误:Y没有默认值(这很奇怪)。默认值定义良好。第二个代码不起作用。无法解析函数测试的参数y的C++默认值“Matd()”。人们将该主题标记为重复。但我发现的解决方案需要使用Rcpp数值矩阵并将其转换为犰狳矩阵。那么,难道不能对犰狳参数使用默认值吗?您需要发布更多代码来回答这两个问题。它们可能是新问题。
mat test(mat X, mat Y = mat()) { ... }