名字空间的问题

g_yxh 2002-06-21 04:45:38
#include <iostream>
using namespace std;

int x = 100;

class WithStatic {
static int x;
static int y;
public:
void print() const {
cout << "WithStatic::x = " << x << endl;
cout << "WithStatic::y = " << y << endl;
}
};

int WithStatic::x = 1;
int WithStatic::y = x + 1;// WithStatic::x NOT ::x

int main() {
WithStatic ws;
ws.print();
} ///:~
运行结果:
WithStatic::x = 1
WithStatic::y = 2
为什么不是
WithStatic::x = 1
WithStatic::y = 101
...全文
35 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
leasun 2002-06-21
  • 打赏
  • 举报
回复
静态成员解析类似于函数的调用,如果是函数的话会选用哪个X?
ysr 2002-06-21
  • 打赏
  • 举报
回复
我认为这是编译器的类型推理功能,由于前面的WithStatic名字空间的原因,编译器首先在该名字空间查找变量x,这是他发现了,所以此处的x在该表达始终覆盖了全局名字空间的x。
如果在此处再定义一个变量int c = x + 1,那么因为没有前面的WithStatic名字空间的限定,这时将使用全局名字空间的x。
sywj115447 2002-06-21
  • 打赏
  • 举报
回复
我也想知道。
sokoban 2002-06-21
  • 打赏
  • 举报
回复
关注!
我认为就应该是X=1,Y=2
elevenj 2002-06-21
  • 打赏
  • 举报
回复
那为什么不是WithStatic::x = 100
WithStatic::y = 101
我认为,WithStatic::x = 1使得 x为1,虽然你也写了x=100,但是静态成员初始化后是不会再改变的,而且它的初始化是在最开始完成的工作,x=100是不起作用的。
elvahuang 2002-06-21
  • 打赏
  • 举报
回复
gz
楼上的说的东西是在哪儿看到的啊?????????说说好吗?
codingcoding 2002-06-21
  • 打赏
  • 举报
回复
有冲突的时候,优先使用类的成员变量
seashoreboy 2002-06-21
  • 打赏
  • 举报
回复
c++编程思想里好像讲过这个问题,编译器自动在x前加了WithStatic::。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧