1.成员函数函数体的解析时机
看如下的示例:
string myvar;
class A
{
public:
int myfunc()
{
return myvar;
}
private:
int myvar;
};
编译一下,没有报错,上述代码有两个myvar,分别是全局的string类型和成员变量int类型,那为什么编译器不认为成员函数myfunc返回的myvar变量是全局string类型的呢?这是因为,编译器对成员函数myfunc的解析是整个类A定义完毕后才开始的。
2.成员函数参数类型的确定时机
看如下的示例:
typedef string mytype;
class A
{
public:
void myfunc(mytype tmpvalue)//参数类型,最近原则
{
m_value = tmpvalue;//整个类定义完毕后解析函数体
}
private:
int myvar;
typedef int mytype;
mytype m_value;
};
编译后如下提示:
报错原因:成员函数的参数类型实在编译器最近一次遇到mytype时决定的,从上往下最近一次遇到mytype的时候,编译器只看到了
typdef string mytype;
而没有看到
typedef int mytype;