字符串文字不允许作为非类型模板参数
以下引用来自Addison Wesley的C ++模板。有人可以帮助我用简单的英语/外行人的术语来理解它的要点吗?
因为字符串文字是具有内部链接的对象(两个字符串文字具有相同的值但在不同的模块中是不同的对象),所以您不能将它们用作模板参数:
没有找到相关结果
已邀请:
5 个回复
膏焦凑
时,它被赋予内部联系。所以考虑到这两个翻译单元:
这些
中的每一个都指的是只有各自翻译单位才能看到的实体(在这种情况下是一种功能);也就是说,每个翻译单元都有自己的
。 这是捕获,然后:字符串文字与
的类型相同。那是:
正如您所看到的,文字的值是该翻译单元的内部值。因此,如果您在多个翻译单元中使用
,它们最终都会成为不同的实体。‡ 总的来说,这意味着这在概念上毫无意义:
因为每个翻译单元的
不同。每个翻译单元将被赋予不同的类,因为每个翻译单元都是不同的实体,即使它们提供了“相同”的参数。 在语言层面上,这是通过说模板非类型参数可以是指向具有外部链接的实体的指针来强加的;也就是说,跨翻译单元引用相同实体的东西。 所以这很好:
†并非所有标识符都具有链接;有些没有,比如功能参数。 ‡优化编译器将相同的文字存储在同一地址,以节省空间;但这是一个实施细节的质量,而不是保证。
翰冒绢县
...因为
不能100%保证解析为可用于实例化模板一次的单个整数值(尽管大多数好的链接器将尝试折叠链接对象的所有用法并生成具有单个副本的新对象的字符串)。 但是,您可以使用外部字符数组/指针:
磨标烫徽啪
渐首洽陈染
可以用于:
正如我所说,这是一种解决方法。我不假装这是一个好的,干净的,可移植的代码,但其他人可能觉得它很有用。 另一种解决方法可能涉及多个char模板参数,如本答案中所述。
辩谷变充