首页 > 解决方案 > 如何检查引用是否为 const?

问题描述

begin()我正在为我的迭代器类型编写一个测试,并想检查由和提供的取消引用迭代器返回的引用cbegin()是否分别是非常量和常量。

我尝试做类似以下的事情: -

#include <type_traits>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec{0};

    std::cout << std::is_const<decltype(*vec.begin())>::value << std::endl;
    std::cout << std::is_const<decltype(*vec.cbegin())>::value << std::endl;
}

但这0两种情况都适用。

有没有办法检查引用是否为 const?

我可以使用 C++11/14/17 功能。

标签: c++referenceiteratorconstantstypetraits

解决方案


删除引用以获取被引用类型以检查其常量。引用本身永远不会是 const - 即使对 const 的引用可能通俗地称为 const 引用:

std::is_const_v<std::remove_reference_t<decltype(*it)>>

推荐阅读