gpt4 book ai didi

c++ - 从模板函数返回的 const 相关名称,const 去哪里了?

转载 作者:可可西里 更新时间:2023-11-01 18:26:15 25 4
gpt4 key购买 nike

假设我有一个模板函数(例如,foo),它返回一个 const 依赖类型。将返回类型限定为 const 的选项是将 const 放在 typename 关键字的左侧:

template<typename T>
const typename T::bar
^^^^^
foo(T const& baz) {
...
}

或者依赖类型右边:

template<typename T>
typename T::bar const
^^^^^
foo(T const& baz) {
...
}

但是,如果我将 const 限定符放在 typename 关键字和依赖类型之间呢?

template<typename T>
typename const T::bar
^^^^^
foo(T const& baz) {
...
}

如预期的那样,无法为 GCC 和 CLANG 编译,但令我惊讶的是 VC++ 可以很好地编译它。

问:

  • 这是 VC++ 扩展吗?
  • C++ 标准是否说明了在这样的上下文中放置 const 限定符的适当位置?

最佳答案

Does the C++ standard says anything about where is the appropriate place to put const qualifier in such a context?

是的。 typename 出现在 typename-specifier 中,whose production is

typename nested-name-specifier identifier
typename nested-name-specifier templateopt simple-template-id

换句话说,它后面必须直接跟nested-name-specifierconst 是不允许的。

关于c++ - 从模板函数返回的 const 相关名称,const 去哪里了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com