C++ CV-自动变量的限定符

C++ CV-自动变量的限定符,c++,c++11,auto,C++,C++11,Auto,我发现了以下“规则”: […]仅当常量和volatile限定符位于最外层引用的顶部或正下方时,才会自动删除它们[…] 我知道顶级cv限定符是对变量本身的描述(与它指向或引用的内容的描述相比)。但是什么时候cv限定符“就在最外层引用的正下方”以及为什么会自动删除它(可能第一个问题也回答了第二个问题)?“cv就在最外层引用的正下方”表示引用是对cv限定类型的引用。例如,以该函数为例: const int& foo(); “最外层参考的正下方”类型是const int,这意味着const也在

我发现了以下“规则”:

[…]仅当常量和volatile限定符位于最外层引用的顶部或正下方时,才会自动删除它们[…]

我知道顶级cv限定符是对变量本身的描述(与它指向或引用的内容的描述相比)。但是什么时候cv限定符“就在最外层引用的正下方”以及为什么会自动删除它(可能第一个问题也回答了第二个问题)?

“cv就在最外层引用的正下方”表示引用是对cv限定类型的引用。例如,以该函数为例:

const int& foo();
“最外层参考的正下方”类型是
const int
,这意味着
const
也在那里。在此代码中:

auto i = foo();
i
的类型是
int
,而不是
const int
const int&

不在最外层参考正下方的常数的示例有:

const char* bar();
const double* volatile & baz();

使用
auto
调用这些函数将分别推断为类型
constchar*
constdouble*

此代码不编译,我认为不应该编译。常数int x=10;常数int&a=x;自动&b=a;b=500;常量限定符不应被删除。@user42768但您没有使用
auto
,您在示例中使用的是
auto&
。我认为在auto关键字中添加修饰仍然会像往常一样找到类型,然后在其中添加修饰(可能考虑引用崩溃)。所以在使用auto&和auto&&时还有其他规则?很抱歉,这个例外的描述在我引用的同一页上(第一修正案)。