考虑以下构造:为什么不能默认参数取决于非默认参数?
class MyClass {
MyClass(unsigned int dimension, std::vector vector=unitaryVector(dimension));
};
其中unitaryVector(d)
是返回d维随机std::vector
的功能。
这提供了以下编译器错误:
error: default argument references parameter 'dimension'
MyClass(unsigned int dimension, std::vector vector=unitaryVector(dimension));
为什么没有这个成语在C++ 11有效吗?这似乎很明显:如果提供了vector
参数,则将init vector
作为参数的副本,否则,调用该函数并将它初始化为返回值的副本。为什么编译器不能理解这一点?
你的功能需求似乎是一个非常合理的事情,但是,它是在标准?如果不是,编译器作者没有义务实施它。 – pyon
http://stackoverflow.com/questions/1880866/cc-default-argument-set-as-a-previous-argument –
可能的重复您可能会使用std :: optional <>,其默认值为空,而不是一个明确的默认值。这具有以下优点:默认值不会成为ABI的一部分,因此修补将更加容易。 – lorro