c++ - 'const T*' 是 cv 未限定的类型吗?

标签 c++ types qualifiers

在 C++ 标准中有很多措辞,包括术语“cv-qualified”和“cv-unqualified”。众所周知,cv 限定类型是包含一组 cv 限定符的类型: { "const" 之一}, { "volatile" }, { "const, volatile" }, { " " }.

但是当std::remove_cv_t<const T*>返回的类型时我感到困惑实际上是const T*不是T* 。为什么?

考虑此声明 const int *volatile ptr{} ,如果我们假设 ptr 的类型是 cv T ;什么T是?什么cv是?

另一个例子,

const int&& r1 = 0; 
const int* &&r2 = 0;
const int *const &r3 = 0; 
  • 如果类型为r1cv1 T1 ;什么T1是?什么cv1是?
  • 如果类型为r2cv2 T2 ;什么T2是?什么cv2是?
  • 如果类型为r3cv3 T3 ;什么T3是?什么cv3是?

最佳答案

But I get confused when the type returned by std::remove_cv_t<const T*> is actually const T* not T*. Why?

const左边是一个谎言。如果你使用右手常量,它会更有意义。 const T *可以重写为T const *当从右向左读取时,是“指向 const T 的非常量指针”,因此它不是 cv 限定的。 T * const另一方面是const指向T的指针,因此它符合简历要求。

Consider this declaration const int *volatile ptr{}, if we assume the type of ptr is cv T; what T is? what cv is?

const int *volatile ptr你有一个volatile指向 const int 的指针,所以Tint const *和简历资格 Tvolatile .

在上一个示例中,没有任何引用文献经过简历限定,因为这需要 const位于引用文献的右侧(即: int & const )。但我们实际上不允许这样做,因此推荐信永远不符合简历要求。

关于c++ - 'const T*' 是 cv 未限定的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73573498/

相关文章:

types - 我如何才能让 Agda 相信我的函数具有一定的值(value)?

types - 向 Agda 证明我们在谈论同一件事

java - 如何将用户定义的数据类型中的值插入到java中的对象中?

c - C 中的双指针常量正确性警告

android - 在 Android Studio 中创建新的 XML 文件时无法查看可用的限定符

C++ fatal error LNK1120 : 1 unresolved externals

c++ - 为用户定义类型的 shared_ptr 专门化标准库函数是否合法?

c++ - 使用循环遍历三角形内的所有点

c++ sizeof在以下位置给出错误未处理的异常

c - 这 5 种无数种声明/初始化常量限定指针的方法有什么问题?(摘自一本可疑但受欢迎的书)