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