CV - 自动变量的限定符
CV - qualifiers of an auto variable
我发现 here 以下 "rule":
[...] auto drops const and volatile qualifiers only if they're at the top or right below an outermost reference [...]
我知道顶级 cv 限定符是对变量本身的描述(与它所指向或引用的内容的描述相比)。但是什么时候是 cv-qualifier "right below an outermost reference" 以及为什么会自动删除它(可能第一个问题也回答了第二个问题)?
"cv 就在最外层引用的下方" 表示引用是对 cv 限定的类型。例如,取这个函数:
const int& foo();
类型 "right below the outermost reference" 是 const int
,这意味着 const
也在那里。在这段代码中:
auto i = foo();
i
的类型是 int
,不是 const int
或 const int&
。
const
不是最外层引用正下方的例子是:
const char* bar();
const double* volatile & baz();
使用 auto
调用这些函数将分别推断为类型 const char*
和 const double*
。
我发现 here 以下 "rule":
[...] auto drops const and volatile qualifiers only if they're at the top or right below an outermost reference [...]
我知道顶级 cv 限定符是对变量本身的描述(与它所指向或引用的内容的描述相比)。但是什么时候是 cv-qualifier "right below an outermost reference" 以及为什么会自动删除它(可能第一个问题也回答了第二个问题)?
"cv 就在最外层引用的下方" 表示引用是对 cv 限定的类型。例如,取这个函数:
const int& foo();
类型 "right below the outermost reference" 是 const int
,这意味着 const
也在那里。在这段代码中:
auto i = foo();
i
的类型是 int
,不是 const int
或 const int&
。
const
不是最外层引用正下方的例子是:
const char* bar();
const double* volatile & baz();
使用 auto
调用这些函数将分别推断为类型 const char*
和 const double*
。