【发布时间】:2018-11-23 10:07:28
【问题描述】:
我正在为我的迭代器类型编写测试,并想检查由 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 功能。
【问题讨论】:
-
引用永远不能是 const 限定的。只有引用被引用的类型可以是 const 限定的。
std::is_const_v<std::remove_reference_t<T>>.
标签: c++ reference iterator constants typetraits