c++ - 资格转换的歧义
问题描述
我想我要么误解了某些东西,要么标准中的某些东西可能模棱两可。这是关于资格转换的。
根据最新草案http://eel.is/c++draft/conv.qual#1
类型 T 的 cv 分解是 cvi 和 Pi 的序列,使得对于 n>0,T 是“cv0 P0 cv1 P1⋯cvn−1 Pn−1 cvn U”,
至于我对类型 T 的分解的理解:
using T1 = const char * const **;
可能正在关注
- n = 2
- U = 字符
- cv2 = 常量
- P2 = *
- cv1 = 常量
- P1 - *
- cv0 = 空
- P0 = *
但由于没有说明分解应该朝哪个方向(IMO)也可以用另一种方式解释:
- n = 2
- U = 字符
- cv0 = 常量
- P0 = *
- cv1 = 常量
- P1 - *
- cv2 = 空
- P2 = *
这将对以下句子http://eel.is/c++draft/conv.qual#3.3产生影响:
如果 cv1i 和 cv2i 不同,那么 const 在每个 cv2k 中,因为 0 < k < i。
因为对于第一种解释,对于 i = 1 或 2,句子永远不会被满足,而对于第二种解释,对于 i = 1 或 2,句子将是正确的。
我的第二个疑问是,如何解释这句话
如果 cv1i 和 cv2i 不同,那么 const 在每个 cv2k 中,因为 0 < k < i。
对于 i = 0 或 1。对于 i = 0 或 1,cv 集合是空的,因此我们可以说这个集合的所有 cv 都有 const,因为一切都没有,集合中没有元素,但我们也可以说没有元素有 const,因为集合中没有元素。
标准中是否有任何地方可以解释如何准确理解 cv 分解以及应该朝哪个方向发展?
解决方案
@MartinBonner 在问题的评论中给出了答案。
我没有注意到 U 旁边有 cvn,这意味着 constness分解是从最外层指针到最内层指针。
(索引最大的 cv 将最接近 U 型)。
推荐阅读
- javascript - 一系列 Promise 是如何与 reduce 一起工作的?
- android - Nativescript 构建失败
- android - 我无法从 Android Studio 中的 udacity 同步任何项目。每次都出现以下错误
- sonarqube - SonarQube 6.7.4 增量扫描
- awk - 使用第 1 行第 i 列作为输出文件名 awk
- c++ - 如何使用 cmake 编译 C++ 文件和 CUDA 文件
- java - 包含字符串的特殊字符无法转换为实际字符
- c# - 如何使我在 POS 打印机上的收据对齐
- android - 来自多个发件人但在同一个应用程序中的 FCM
- python - 我应该使用什么 3D 格式来有效地将 Solidworks 零件导入 VTK?