Tim*_*imo 4 c++ qualifiers c++17
给定以下类型:
struct A
{
std::vector<std::string> vec;
using reference = std::iterator_traits<decltype(vec)::iterator>::reference;
using const_reference = const reference;
};
Run Code Online (Sandbox Code Playgroud)
为什么reference == const_reference?为什么const限定符会在第二个类型别名中删除?
请参阅godbold上不应编译的示例.
我有一个模板化的类,它将一堆迭代器(-types)作为模板参数.从这些迭代器我需要推导出引用和const引用类型,因为我有一些成员函数,如:
struct A
{
std::vector<std::string> vec;
using reference = std::iterator_traits<decltype(vec)::iterator>::reference;
using const_reference = const reference;
const_reference foo() const
{
return vec[0];
}
};
Run Code Online (Sandbox Code Playgroud)
通过删除const限定符,我实际上返回了一个foo非法的引用,因为它是一个const成员函数,所以编译器抛出.
它被丢弃了.我们称之为"const引用"实际上是对const的引用const int&.
有一个int&和添加const会做到这一点int& const.但这样的const被删除了.
你的问题类似于const int*和之间的区别int* const.除了参考,int&并且int& const是相同的类型 - const被忽略.
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |