一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值(evaluated)的,也就是说,对于如下代码:

 1 extern int x;
 2 
 3 class A
 4 {
 5 public:
 6     ...
 7     //对于函数本体的分析将延迟,直至class申明的}出现时才开始。
 8     float X() const { return x; }
 9     ...
10 private:
11     float x;
12     ...
13 }
14 //这儿进行该函数的分析,所以此时用到的x不是全局变量x而是class A中的成员x

但是,member function的argument list并不为真。Argument list中的名称还是在它们第一次遭遇时被适当的决议(resolved)完成。下面的程序中,length的类型在两个member function signatures中都被决议(resolved)为global typedef,也就是int。当后续再有length的nested typedef声明出现时,c++标准就把稍早的绑定标志为非法(最后一局没大听懂):

#include <bits/stdc++.h>
using namespace std;

typedef int length;

class A
{
    typedef double length;//如果在这儿声明,那么就没问题。
public:
    void mumble(length val = 1){
        printf("%lf\n", val);
    }
private:
    //typedef double length;如果在这儿声明的,那么mumble函数中length会被决议为int
};
int main()
{
    A a;
    a.mumble();
        return 0;
}