谁能解释这几个问题?
问题1:
class Point
{
public:
void Init(int initX, int initY);
private:
int x, y;
}
inline void Point::Init(int initX, int initY)
{
x=initX, y=initY;
}
拿这个举例,为什么在类内联成员函数在类中声明时不用在前面叫inline呢?
普通的内联函数声明时不是一定要加inline的吗?大侠们给解释一下。
问题2
关于静态生存期
#include <iostream.h>
void main()
{
static int a; //函数内部声明的静态生存期变量
}
void other(void)
{
static int a=2; //同样也是函数内部声明的静态生存期变量
}
上面的程序可以运行,请问静态生存期的变量都存在了内存的全局数据段,那这两个a是如何区分?
[解决办法]
1
“普通的内联函数声明时不是一定要加inline的吗?”
没有这种说法(这是楼主自己猜的吧?),类内联成员函数在类中声明就是不用加inline,这是规定,请死记!!
2.
void main()
{
static int a; //函数内部声明的静态生存期变量
}
void other(void)
{
static int a=2; //同样也是函数内部声明的静态生存期变量
}
main函数里面用a,用的就是红色那个a
other函数里面用a,用的就是蓝色那个a
其他函数里面,访问不到a,无论是红色那个还是蓝色那个,都访问不了
[解决办法]
问题1,
类声明中的函数,编译器默认是内联函数; 使用不使用关键字inline没有关系吧。
问题2,
全局数据,在内存中显然是没有名字只有地址,地址是不相同的。
而编译器在确定两个a的调试信息的时候,要在a前面加上奇怪的前缀的,就是平时编译程序老看到函数前面有奇怪的名字的缘故。