在 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;
- 如果类型为
r1
是cv1 T1
;什么T1
是?什么cv1
是? - 如果类型为
r2
是cv2 T2
;什么T2
是?什么cv2
是? - 如果类型为
r3
是cv3 T3
;什么T3
是?什么cv3
是?
最佳答案
But I get confused when the type returned by
std::remove_cv_t<const T*>
is actuallyconst T*
notT*
. 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 ofptr
iscv T
; whatT
is? whatcv
is?
与 const int *volatile ptr
你有一个volatile
指向 const int
的指针,所以T
是 int const *
和简历资格 T
是 volatile
.
在上一个示例中,没有任何引用文献经过简历限定,因为这需要 const
位于引用文献的右侧(即: int & const
)。但我们实际上不允许这样做,因此推荐信永远不符合简历要求。
关于c++ - 'const T*' 是 cv 未限定的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73573498/