C++编程语言中的类静态成员如何才能正确的进行初始化呢?我们今天就为大家详细介绍一下这方面的知识。希望能够帮助大家充分的掌握C++类静态成员初始化的应用技巧,以方便将来的程序开发。
C++类静态成员初始化相关实现代码介绍:
- 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)
【编辑推荐】