gpt4 book ai didi

c++ - 为什么删除此类型别名中的 const 限定符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:23 24 4
gpt4 key购买 nike

<分区>

长话短说

给定以下类型:

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 成员函数,因此编译器会抛出异常。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com