`const T` 和 `T` 在获取其嵌套类型时没有区别吗?

xml*_*lmx 4 c++ templates language-lawyer

#include <string>

template<typename T, typename C, typename CR>
void f()
{
    typename T::size_type*     p1{}; // ok
    typename CR::size_type*    p2{}; // error
    typename C::size_type*     p3{}; // Does the C++ standard allow this?        
}

int main()
{
    f<std::string, const std::string, const std::string&>();
}
Run Code Online (Sandbox Code Playgroud)

和 取其嵌套类型时没有区别吗const T ? T

ein*_*ica 5

事实上,“嵌套类型”是相同的。

const用和/或限定的类型volatile是非限定类型的“版本”(标准中的[basic.type.qualifier],6.3.8,第 1 段) - 即使它不完全相同。这与指针或引用不同,指针或引用在引入时形成与其指向或引用的类型完全不同的类型(标准 9.3.3.1 和 9.3 的条款[dcl.ref]和[dcl.ptr]) 。 3.2 第 1 段)。

还值得一提的是,类范围类型不会获得 -限定,因为您从类型的版本const中获取它们-例如,与 完全相同的类型- 但与不同。conststd::vector<int>::iteratorstd::add_const_t<std::vector<int>>::iteratorstd::vector<int>::const_iterator

  • “类型的 cv 限定或 cv 不限定版本是不同类型”...“不同类型”中的“不同”是什么意思?“T”和“const T”之间的区别与“T”和“T&amp;”之间的区别有何不同? (2认同)