C++ 17 as_const

C++ 17 as_const
枫C++ 17 as_const
std::as_const的功能很简单:把一个对象转换成 const 引用。
它不会拷贝对象,也不会真的创建新对象,只是让你以 const 视角去看它。
1. 它是干什么用的?
有些对象既有 const 成员函数,也有非 const 成员函数。
如果当前变量本身不是 const,而你又想明确调用 const 版本,可以用 std::as_const。
2. 基本示例
1 |
|
这里 ref 只是 nums 的 const 引用,不会发生拷贝。
3. 一个更典型的场景
1 |
|
这时会调用 const 版本的 get()。
4. 为什么不用手写 const 引用?
当然也可以这样写:
1 | const Demo& cd = d; |
但 std::as_const(d) 更短,也更明确表达了“这里只是临时想按 const 看它一下”。
5. 使用场景
5.1 调用 const 重载版本
这是最常见的场景。
5.2 避免误修改
有时只是想只读访问一个对象,用 as_const 能强化这个意图。
5.3 泛型代码里限制接口
在模板代码里,as_const 也能帮助你显式使用 const 语义。
6. 使用时要注意的点
6.1 它不会生成新对象
只是返回 const 引用,所以底层对象还是原来的那个。
6.2 不能拿它去修改对象
既然是 const 视角,那自然只能调用 const 接口。
6.3 移动对象不适合这样用
as_const 的目的就是“只读”,和移动语义的方向正好相反。
总结
std::as_const 虽然很小,但很实用。
它最常见的价值就是让你显式调用 const 版本接口,而不用额外写一份 const 引用变量。属于那种学起来几分钟、但日常写代码偶尔会很顺手的小工具。














