c++ - 如何检查引用是否为 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 功能。
解决方案
删除引用以获取被引用类型以检查其常量。引用本身永远不会是 const - 即使对 const 的引用可能通俗地称为 const 引用:
std::is_const_v<std::remove_reference_t<decltype(*it)>>
推荐阅读
- tensorflow - 如何使用 Keras 构建预训练的 CNN-LSTM 网络
- html - Boostrap flexbox 同宽子
- git - 推送到远程存储库(例如 Google 源存储库)时缺少 git 标签
- python - 将 .txt 文件拆分为元素
- python - Python/SQLAlchemy - 如何使用多个 WHERE 子句快速查询数据库?
- chart.js - 图表内的 Chart.js 自定义图例
- python - python中的魔术方法和__str__函数
- node.js - C++ 入口点未显示在 node.js 分析输出中
- ionic-framework - 电子 + 离子 + child_process
- python - 将列从 Pandas 日期对象更改为 python 日期时间