C++语法基础之学习笔记

关键字const有什么含意?修饰类呢?static的作用,用于类呢?还有extern c的作用

 

const意味着"只读",下面的声明都是什么意思?  

 代码如下 复制代码
const int a;  
int const a;  
const int *a;  
int * const a;  
int const * a const; 

 

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

 

结论:

?; 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果
你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清
理的。)  
?; 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。  
?; 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。  
 

(1)欲阻止一个变量被改变,可以使用 const 关键字。在定义该 const 变量时,通常需要对它进行初
始化,因为以后就没有机会再去改变它了; 
(2)对指针来说,可以指定指针本身为 const,也可以指定指针所指的数据为 const,或二者同时指
定为 const; 
(3)在一个函数声明中,const 可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值; 
(4)对于类的成员函数,若指定其为 const 类型,则表明其是一个常函数,不能修改类的成员变量; 
(5)对于类的成员函数,有时候必须指定其返回值为 const 类型,以使得其返回值不为“左值”。

关键字volatile有什么含意?并给出三个不同的例子。

 

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到
这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:  

?; 并行设备的硬件寄存器(如:状态寄存器)  
?; 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)  
?; 多线程应用中被几个任务共享的变量 

 

?; 一个参数既可以是const还可以是volatile吗?解释为什么。  
?; 一个指针可以是volatile 吗?解释为什么。  

下面是答案:  
?; 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。  
?; 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。  

  

 

static 关键字的作用:

 

(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,
因此其值在下次调用时仍维持上次的值; 
(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; 
(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明
它的模块内; 
(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; 
(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。 

extern "C" 的作用

 

(1)被 extern "C"限定的函数或变量是 extern 类型的;

       extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,
其声明的函数和变量可以在本模块或其它模块中使用。

(2)被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的; 

 

extern "C"的惯用法 

(1)在 C++中引用 C 语言中的函数和变量,在包含 C 语言头文件(假设为 cExample.h)时,需进
行下列处理: 

 代码如下 复制代码
extern "C"  
{  
#include "cExample.h"  
}  

而在 C 语言的头文件中,对其外部函数只能指定为 extern 类型,C 语言中不支持 extern "C"声明,
在.c 文件中包含了 extern "C"时会出现编译语法错误。

(2)在 C 中引用 C++语言中的函数和变量时,C++的头文件需添加 extern "C",但是在 C 语言中不
能直接引用声明了 extern "C"的该头文件,应该仅将 C 文件中将 C++中定义的 extern "C"函数声明为
extern 类型。

10.为什么标准头文件都有类似以下的结构?  

 代码如下 复制代码
   #ifndef __INCvxWorksh  
   #define __INCvxWorksh  
   #ifdef __cplusplus  
   extern "C" {  
   #endif  
   /*...*/  
   #ifdef __cplusplus  
   }  
   #endif  
   #endif /* __INCvxWorksh */ 

显然,头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用
是防止该头文件被重复引用。

时间: 2024-08-02 14:12:55

C++语法基础之学习笔记的相关文章

整理Javascript基础入门学习笔记_javascript技巧

了解什么是变量? 变量是用于存储信息的容器 变量的声明 语法: var  变量名变量名 = 值; 变量要先声明再赋值 变量可以重复赋值变量的命名规则 变量必须以字母开头: 变量也能以$和_符号开头(不过我们不推荐这么做): 变量名称对大小写敏感(a和A是不同的变量). 1.语句 语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾. 有个好的编码习惯,都要以 ; 结尾 2.数据类型 在JavaScript中,一段信息就是一个值(value).值有不同的类型,大家最熟悉的类型是数字.字符串(

javascript 语法基础 想学习js的朋友可以看看_基础知识

1:javascript区分大小写 2:javascript每一条语句必须以";"结束,与C语言一样 3:输出:document.write("字符串")--->还可以输出对应的html标记 4:改变窗体的颜色document.bgColor="red"; 4:类型转换:parseInt,parseFloat 5:随机函数:parseInt(Math.random()*90+10) 产生10--100的随机数 5:弹出对话框:alert(&

yii2.0基础的学习笔记

yii2.0学习笔记,比较乱,凑合的看一下. 1.接收参数 $request = \yii::$app->request; $request->get('a','defVal')  接收一个get请求的参数 $request->post('a','defVal')  接收一个post请求的参数 $request->isGet  判断是否是get请求. $request->userIp 获取访问者的ip 2.头部响应 $resp = \YII::$app->respons

bootstrap基础知识学习笔记_javascript技巧

在此就不做 bootstrap 的介绍了,近几年 bootstrap 越来越流行,一点不亚于 js 中的 jquery. 以下为 bootstrap 3.3.5 学习中记录的东西,方便查阅,作者使用的是 jsp ,跟 html 可能有稍许不同,请自行参考修改 [引用文件] [页面引用] 路径请自行规划 <script type="text/javascript" src="<%=path%>/js-lib/jquery/jquery-1.11.2.min.j

移动交互小白零基础入门学习笔记之:手势篇

此贴为零基础入门学习贴,总结和积累些基础知识~ 1.基本手势 触屏设备中多样的手势操作,都是由这10种基本手势组合演变而来. 2.常用动作 基本动作是触屏界面中最常用的动作,如打开.选择等. 与对象有关的动作是对屏幕上某一目标对象的操作,如调整图片的位置大小,选择.删除或移动一个文件等. 导览动作是对屏幕视图的操作,如切换屏幕.滚动屏幕.缩放网页等. 画图示意动作是用画图的方式来示意某些操作,这些图形最好是常见易画的图形,符合用户心理预期,如画勾表示确认,画叉表示取消. 以上都是触屏设备中常用的

HTML基础知识学习笔记

毕业也快一年,一直从事网络推广工作,工作中经常接触到HTML代码,虽然大学里学过一些,但是自己仍然对HTML基础知识不够顽固,对于HTML没有系统性的概念.在这几天的HTML基础知识学习当中,主要有以下几点感悟. 1.看似熟悉,具体用法不懂 对于HTML基础知识,只能说大部分都是认识,知道代码是什么意思,可是详细的细分,具体代码怎么用,自己有不知道,对一些标记的属性根本不知道.比如说基本蚊子标记符<SUB>下角标和<SUP>上角标,网页标记<meta>网页的语言,之前的

Redis基础使用学习笔记

Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API, 包括Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等 Redis 是一个高性能的key-value数据库,它支持存储的value类型包括string (字符串).list(链表).set(集合).zset(sorted set–有序集合)和hash(哈希类型).这些数

PHP基本语法和数据类型学习笔记

PHP基本语法和数据类型: (1).PHP基本语法:                1.htm 和 php 混编                2.一个语句以  ; (分号结束)                3.如何定义一个变量,和变量的使用 (2).PHP数据运算类型       四种标量类型:                        boolean(布尔型) 理解为真假型                        integer(整型)                      

Python基础教程学习笔记 第一章 基础知识_Android

1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入"python -V"查看版本号,注意V是大写字母,这条命令是Windows命令,而不是python shell的命令 3.让解释器只执行普通的除法运算:from __feture__ import division 4.执行整除运算的运算符:// 5.取幂运算符:2**4 相当于2的4次方,-2**4相当于2的4次方之后取负,因为