<分区>
长话短说
给定以下类型:
struct A
{
std::vector<std::string> vec;
using reference = std::iterator_traits<decltype(vec)::iterator>::reference;
using const_reference = const reference;
};
为什么 reference == const_reference
?为什么在第二个类型别名中删除了 const
限定符?
请参阅 godbold 上的示例不应该编译。
详情
我有一个模板化类,它接受一堆迭代器(-types)作为模板参数。我需要从这些迭代器中推导出引用和常量引用类型,因为我有一些成员函数,例如:
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];
}
};
通过删除 const
限定符,我实际上在 foo
中返回了一个引用,这是非法的,因为它是一个 const 成员函数,因此编译器会抛出异常。