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;
文章讨论了编译器如何处理成员函数中的变量解析和参数类型的确定。在示例中,成员函数myfunc返回的myvar被正确识别为类内的成员变量而非全局变量,因为解析发生在类定义完成后。另一方面,成员函数参数的类型由最近的typedef定义决定,导致示例中的类型冲突。
4642

被折叠的 条评论
为什么被折叠?



