Blu*_*rin 3 c++ theory static default-value
我想知道为什么类的方法的变量的默认值,不能是非静态方法或同一类的成员.
这有什么理由吗?编译器无法向该方法提供非静态默认值类中的位置吗?
我试图快速谷歌寻找答案,但我无法得到一个好的答案.
编辑:这是一个例子.
这是合法的:
class ClassTemp
{
static int s_member;
int MagicOperation(int defaultValue = s_member)
{
return defaultValue;
}
};
Run Code Online (Sandbox Code Playgroud)
但这不是:
class ClassTemp
{
int m_member;
int MagicOperation(int defaultValue = m_member)
{
return defaultValue;
}
};
Run Code Online (Sandbox Code Playgroud)
默认参数在调用者的上下文中进行计算(这就是为什么它们通常称为"参数",而不是"参数"),而不是在类方法的上下文中.这意味着为了评估这些非静态参数,编译器需要知道从中获取这些默认值的特定类实例.
当然,理论上可以允许使用非静态成员作为默认参数,并使编译器使用成员调用中指定的类实例.但这听起来不像是"C++方式"对我做事.此外,在某些更复杂的情况下,例如,当方法是虚拟的时,它可能会导致相当复杂和不优雅的规范.