C++day1
第一章 C++ 基础
前言
C++基础中一些重要的关键字,例如:const,::
提示:以下是本篇文章正文内容,下面案例可供参考
一、const关键字
const是用来指定一个语义约束的关键字,允许程序员告诉编译器某值是保持不变的。
1. const修饰普通类型变量
const int a = 7;
a = 8;
a 被编译器认为是一个常量,其值不允许修改。若是用指针指向a,并给指针重新赋值,你会发现调试窗口a的值改变,而实际a的值不会改变。
const int a = 7;
int *p = (int*)&a;
*p = 8;
cout<<a;
在 const 前面加上 volatile 关键字可以改变a的值。(此操作没有啥意义)
volatile const int a = 7;
int *p = (int*)&a;
*p = 8;
cout<<a;
2. const 修饰指针变量
A: const 修饰指针指向的内容,则内容为不可变量。
const int *p = 8;
int const *p = 8;
B: const 修饰指针,则指针为不可变量。
int a = 8;
int* const p = &a;
*p = 9;
int b = 7;
p = &b;
C: const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。
int a = 8;
const int * const p = &a;
左定值,右定向,const修饰不变量
3. const修饰引用
首先,定义引用时就要初始化,而且引用本来就不能被改变指向。
int a = 8;
int & const p = a;
const 引用的目的是,禁止通过修改引用值来改变被引用的对象。
int a = 8;
const int & p = a;
int const & p = a;
const int & const p= a;
3. const修饰对象
const对象顾名思义为常对象,所有对象的成员变量不可变。 const对象也不能调用非const函数。
int get_cm()const
{
return _cm;
}
二、::
1.类作用域
用来标明类的变量、函数
代码如下(示例):
Human::setName(char* name);
::char a;
char a;
2.命名空间作用域
用来注明所使用的类、函数属于哪一个命名空间的
代码如下(示例):
std::cout << "Hello World" << std::endl;
三、volatile关键字
1.volatile的作用
volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化。
- 如果一个基本变量被volatile修饰,编译器将不会把它保存到寄存器中,而是每一次都去访问内存中实际保存该变量的位置上。
- 不做常量合并、常量传播等优化。
volatile int i=1;
if(i>0)...
2.volatile成员函数
- 首先如果类是volatile则里面的成员都是volatile的
- 其次要将成员函数声明为volatile则同const一样在函数最后声明即可
int Test::value() volatile
{
return v;
}
借鉴: https://blog.csdn.net/u014520797/article/details/89499353 https://www.runoob.com/w3cnote/cpp-const-keyword.html
|