【发布时间】:2016-09-08 12:39:34
【问题描述】:
我在这里看到了一些答案,但它们可能不适用于这里。我有一个(成员)函数,主要与一个参数(第一个)一起使用:
const std::complex<double> Class::func(const std::complex<double> &x, \
std::vector<double> &y = 0, \
std::vector<double> &z = 0) const;
我希望y 和z 是可选的,甚至可能基于string 类型的第四个参数,例如:func( , , , const std::string &choice),但这样我只能将一个参数传递给功能和其他两个不使用。例如,如果我确实传递了y,它的声明必须在调用func() 之前完成,z 也是如此,但我希望这是可选的,该函数可能有点重数学方面,如果不需要它们,则无需增加计算两个额外向量的负担。这可能吗?
【问题讨论】:
-
好吧,如果你可以等待你的编译器已经有了它,那就是
std::optional。否则有boost::optional。 -
传递一个指针而不是一个引用,并将它们的默认值设置为 nullptr。然后检查你的代码中是否有 y!=nullptr 和 z!=nullptr,你就完成了。一个小警告,除非你有它们的默认值,否则你将无法在这些参数之后有参数(所以你的字符串应该有一个默认值,尽管你可以使用更小的类型来减轻它的重量)。
-
你需要从函数内部修改 y 或 z 吗?换句话说,y 和 z 可以是
const std::vector<double> &z类型 -
@log0 是的,当它们被使用时。我需要先定义
std::vector z; z.resize(x);,然后用它来填充数据,这直接依赖于x参数。
标签: c++ vector default-arguments