大佬教程收集整理的这篇文章主要介绍了为什么在模板声明中使用类型说明符时可以将其视为限定 ID,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
template<typename T>
voID fun(){
T::type v;
}
在本例中,T::type
被视为表达式。相关规则在当前草案中有说明,即:
temp.res#general-5
一个qualifIEd-ID,其终端名称是相关的,并且在一个只有类型的上下文中被认为是一个类型。
在我看来,对于 T::type v
,无论如何不应将 T::type
视为表达式。因为根据整个部分expr,如果遵守[expr]中列出的语法,那不可能是表达式。
在这种情况下,T::type
应被视为具有 nested-name-specifIEr opt type-name
形式的简单类型说明符。至少,它是一个类型说明符而不是一个 qualifIEd-ID
。所以,我想知道 [temp.res#general-5] 如何应用于这个例子,该规则的前提是组件应该首先是一个 qualifIEd-ID。
相比之下,下面的例子有点不同
template<typename T>
voID fun(){
T::type * v;
}
对于T::type* v
,根据[expr]的语法,T::type
可以认为是一个qualifIEd-ID。根据[声明],它也可以被视为类型说明符。标准中没有详细说明如何解决出现在模板声明中的语句的歧义(限定名称是否被视为限定 ID 或某些看起来像限定 ID 的组件,例如简单类型-说明符).
如前所述,规则 [temp.res#general-5] 不包括用于形成语句的这些组件,如果它遵守相应的有效语法,则不能被视为合格 ID。那么,如何解释这些问题?
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的为什么在模板声明中使用类型说明符时可以将其视为限定 ID全部内容,希望文章能够帮你解决为什么在模板声明中使用类型说明符时可以将其视为限定 ID所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。