C 11 模板替换中的直接上下文
C 11 标准引入了替换失败不是错误 (SFINAE),它允许在模板参数替换期间抑制硬编译错误。然而,该标准定义了 SFINAE 适用的特定“直接上下文”,从而导致替换错误何时导致硬错误或软错误存在一些不确定性。
立即上下文定义
标准将直接上下文定义为:
“只有函数类型及其直接上下文中的无效类型和表达式模板参数类型可能会导致推导失败。”
这个定义很模糊,但非规范注释提供了提示:
“对替换类型和表达式的求值可能会导致副作用,例如......此类副作用不在“直接上下文”中,并且可能导致程序格式错误。”
决定过程
要确定在直接上下文中是否发生替换错误,请考虑以下决策过程:
示例
结论
通过理解直接上下文的概念并使用通过上述决策过程,程序员可以更好地预测替换错误何时会导致硬错误或软错误,从而能够在 C 11 中更有效地使用 SFINAE模板。
以上是是什么决定了 C 11 模板替换错误是硬错误还是软错误?的详细内容。更多信息请关注PHP中文网其他相关文章!