C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 文件中模板类的静态数据成员的初始化顺序是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在给定的文件中,如果我有,
struct A { static int a; };
struct B { static int b; };
int a::a;
int B::b;

然后,我总是可以期望A :: a在B :: b之前被初始化.现在对于同一个文件,采取模板案例,

template<typename T>
struct X { static T t; };
template<typename T>
T X<T>::t;

假设,X用A和B实例化,并且其静态成员在代码中的某处任意使用,如X< A> :: t和X< B> :: t,则应该是模板静态成员初始化的顺序X< T> ::吨; ?它定义明确吗?

解决方法

只要模板只有一个定义(例如,您只有一个翻译单元),它就是定义明确的.静态成员按照在需要定义静态数据成员的上下文中实例化模板特化的顺序进行初始化.来自C 03标准的§14.7.1/ 1 [temp.inst](强调我的):

§14.7.1/ 7还规定:

但是,当您有多个定义模板的翻译单元时,事情变得更加复杂. §3.2/ 5 [basic.def.odr]指出:

请注意,标准没有指定将哪个定义作为单个定义,只是选择了某个定义.因此,如果多个翻译单元以不同的顺序实例化模板,则无法保证初始化的顺序.

大佬总结

以上是大佬教程为你收集整理的c – 文件中模板类的静态数据成员的初始化顺序是什么?全部内容,希望文章能够帮你解决c – 文件中模板类的静态数据成员的初始化顺序是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。