前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​C++ cv-qualifier

​C++ cv-qualifier

作者头像
JIFF
发布2020-05-20 23:13:25
1.7K0
发布2020-05-20 23:13:25
举报
文章被收录于专栏:Toddler的笔记Toddler的笔记

C++ cv-qualifier

cv-qualifier 有三种:const and volatile, mutable

const/volatile 称为 type qualifiers。

它们能与任何 T 组合成三种不同的类型:

  • const 修饰的 T, 一般形如 const T 或者 T const
  • volatile 修饰的 T
  • const-volatile 修饰的 T

注意 const/volatile 是直接修饰 type 的。

  • 也就是说:int volatile a, b; 表示 a,b 的类型都是 volatile int。而且 int a, volatile b; 是非法的。
  • 即 const 和 volatile 一定是直接修饰 type 的,不能修饰变量。

这和指针申明 *,引用申明 &,数组申明 [] 等是完全不同的。

  • 例如 int a, *b, c[10], &d = a; 是合法的。

const 和 volatile 可以同时修饰一个 type,表示一个"每当要读此变量时,都从原始内存地址读取",防止被编译器优化掉。

mutable 用于修饰 (1)non-static (2)class members of (3)non-reference (4)non-const (5)type。注意这一句话里有 5 个条件。

代码语言:c++
复制
class X {
  mutable const int* p;
    OK. 看作 (mutable int) (const*) p;
    即 p 并不是一个 const member
  mutable int* const q;
    ill-formed. 看作 (int*) (mutable const) q;
    即 q 是一个 const member
};
  • C++ 中 mutable 是一种 storage-class-specifier, 而不是 type qualifier, 这可能也是为什么它不能和 static 共存.

Reference

  • https://en.cppreference.com/w/cpp/language/cv
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Toddler的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++ cv-qualifier
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档