+ -
当前位置:首页 → 问答吧 → C++ pirmer 中const static 的不解

C++ pirmer 中const static 的不解

时间:2011-12-12

来源:互联网

const static 数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体外进行定义??正确与否(vs2010调试不成功)

作者: Mr_defy_L   发布时间: 2011-12-12

static 数据有的编译器支持在定义内初始化,,那么就不用再在定义体外,否则只在外面。

作者: mingliang1212   发布时间: 2011-12-12

内部定义,外部初始化。

作者: sdgaogao   发布时间: 2011-12-12

const static 数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体外进行定义??正确
但是,重要前提是它类型是整型。
并且,如果你不取此成员的地址,编译器可以优化,你可以不需要在类外进行定义。

作者: taodm   发布时间: 2011-12-12

static 数据有的编译器支持在定义内初始化,即便这样,同时也需要再在定义体外

作者: zzcmx2008   发布时间: 2011-12-12

引用 3 楼 taodm 的回复:
const static 数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体外进行定义??正确
但是,重要前提是它类型是整型。
并且,如果你不取此成员的地址,编译器可以优化,你可以不需要在类外进行定义。

#include<iostream>
using namespace std;
class point
{
public:
point()
{y=0;}
point(int y):y(y){};
void display()const
{
cout<<x<<" "<<y<<endl;
}
private:
static const int x=10;
int y;
};
//const int point::x=10; 类外定义??还是我理解错了,怎么编译不成功,多次初始化
int main()
{
point p1(10),p2;
p1.display();
p2.display();
return 0;
}
1>d:\documents\visual studio 2010\projects\static练习\static练习\1.cpp(17): error C2374: “x”: 重定义;多次初始化

作者: Mr_defy_L   发布时间: 2011-12-12

你自己再认真看看错误提示啊。
让你类外定义,不是让你类外再初始化。

作者: taodm   发布时间: 2011-12-12