C++中关于类中常数静态成员初始化的问题
2006-01-23 11:46
561 查看
class mytestclass
{
public:
const static int i = 5;
};
int main()
{
std::cout<<mytestclass::i<<std::endl;
return 0;
}
结果没有问题,输出为5(编译器为vc7.1)
但是在下面这个例子中:
int regi()
{
return 5;
}
class mytestclass
{
public:
const static int i = regi();
};
int main()
{
std::cout<<mytestclass::i<<std::endl;
return 0;
}
输出却不正确,输出为0(编译链接都没有问题)。。。
似乎代码并没有执行regi函数?
在C++标准中将初始化变量分为"动态初始化"和"静态初始化","动态初始化"为利用函数进行初始化,"静态初始化"为常量表达式进行初始化.
C++标准对于类中的常量表达式的"动态初始化"似乎并未做说明,所以是否支持类中常数静态变量的动态初始化也就取决与编译器的设计了.
但是无论如何vc7.1的编译结果都是不对的,它并没有给出错误,但是结果与逻辑不向符合,这应该是vc7.1的一个bug.(在vs2005中的C++编译器已经修正了这个bug,给出了一个编译Error)
详细讨论请见:
http://community.csdn.net/Expert/topic/4432/4432789.xml?temp=.3202783
特别感谢qfeng_zhao 、 lxpws 、 iGray 等几位.
{
public:
const static int i = 5;
};
int main()
{
std::cout<<mytestclass::i<<std::endl;
return 0;
}
结果没有问题,输出为5(编译器为vc7.1)
但是在下面这个例子中:
int regi()
{
return 5;
}
class mytestclass
{
public:
const static int i = regi();
};
int main()
{
std::cout<<mytestclass::i<<std::endl;
return 0;
}
输出却不正确,输出为0(编译链接都没有问题)。。。
似乎代码并没有执行regi函数?
在C++标准中将初始化变量分为"动态初始化"和"静态初始化","动态初始化"为利用函数进行初始化,"静态初始化"为常量表达式进行初始化.
C++标准对于类中的常量表达式的"动态初始化"似乎并未做说明,所以是否支持类中常数静态变量的动态初始化也就取决与编译器的设计了.
但是无论如何vc7.1的编译结果都是不对的,它并没有给出错误,但是结果与逻辑不向符合,这应该是vc7.1的一个bug.(在vs2005中的C++编译器已经修正了这个bug,给出了一个编译Error)
详细讨论请见:
http://community.csdn.net/Expert/topic/4432/4432789.xml?temp=.3202783
特别感谢qfeng_zhao 、 lxpws 、 iGray 等几位.
相关文章推荐
- C++中关于类中常数静态成员初始化的问题
- 关于c++中类静态成员函数可能破坏类封装性的问题
- C++ 静态成员的类内初始化-of non-integral type 问题
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- 关于C++静态成员函数访问非静态成员变量的问题
- [笔试题 9][c/c++]关于成员变量,对象成员的初始化问题
- 关于c++的类中成员变量初始化问题+初始化列表中对应顺序问题!
- 关于c++的class(偏c++11以前,构造、静态成员、const、初始化列表、友元、内联、template)
- C++静态成员的初始化问题,导致定义的静态成员 unresolved
- 关于C++中用静态成员统计实例化对象个数问题_CVTE技术面问题
- 关于C++静态成员函数访问非静态成员变量的问题
- C++静态整型成员数据在类内初始化
- 关于c++的静态数据(函数)成员的理解
- C++成员变量的初始化顺序问题
- [C++] 关于子类声明与父类同名同类型的成员变量的问题
- 关于类成员的初始化顺序问题
- C++ 关于“不允许使用数据成员初始值设定”的问题
- 关于C++重定义多次初始化问题
- C++成员变量的初始化顺序问题
- Java, C++ 单例模式与静态成员初始化对比