Luc*_*ore 11

实际上,这并不完全准确.限制是:

8.3.6默认参数[dcl.fct.default]

7)不应在默认参数中使用局部变量.[例如:

void f() {
int i;
extern void g(int x = i); //error
// ...
}
Run Code Online (Sandbox Code Playgroud)

- 末端的例子]

8)关键字this不得用于成员函数的默认参数.[例如:

class A {
void f(A* p = this) { } // error
};
Run Code Online (Sandbox Code Playgroud)

因此,this局部变量不能用作默认值.

例如,以下内容有效:

int a = 1;
int f(int);
int g(int x = f(a)); // default argument: f(::a)
void h() {
  a = 2;
  {
    int a = 3;
    g(); // g(f(::a))
  }
}
Run Code Online (Sandbox Code Playgroud)

g将使用值调用,该值f(2)不是编译时常量.这是一个直接来自标准的例子.

这样的原因通常是:要么没有提案,要么被拒绝,认为没有必要或太难实施.