首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

哪位高手能解释这几个小问题

2012-05-05 
谁能解释这几个问题?问题1:class Point{public:void Init(int initX, int initY)private:int x, y}inlin

谁能解释这几个问题?
问题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前面加上奇怪的前缀的,就是平时编译程序老看到函数前面有奇怪的名字的缘故。


热点排行