不允许C++中的变量的默认值是非静态方法或类的成员的原因是什么?

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)

AnT*_*AnT 5

默认参数在调用者的上下文中进行计算(这就是为什么它们通常称为"参数",而不是"参数"),而不是在类方法的上下文中.这意味着为了评估这些非静态参数,编译器需要知道从中获取这些默认值的特定类实例.

当然,理论上可以允许使用非静态成员作为默认参数,并使编译器使用成员调用中指定的类实例.但这听起来不像是"C++方式"对我做事.此外,在某些更复杂的情况下,例如,当方法是虚拟的时,它可能会导致相当复杂和不优雅的规范.