您当前的位置:首页 > 时尚 > 内容

cpp是什么 编程cpp是什么意思

cpp是什么 编程cpp是什么意思对于强类型编程语言,如C/C++,变量的声明与定义怎是那样复杂:[StorageClass] [Qualifier] [Modifier] Type Identifier [= literal(or rig

对于强类型编程语言,如C/C++,变量的声明与定义怎是那样复杂:

cpp是什么 编程cpp是什么意思cpp是什么 编程cpp是什么意思

[StorageClass] [Qualifier] [Modifier] Type Identifier [= literal(or right value)] ;

extern const long double d = 314159E-5L; // 函数外

1 StorageClass 存储类型

存储类型关键字定义变量的存储属性。

主要关键字有:

auto, register, static, extern, mutable(C++)。

1.1 auto

auto 存储类是所有局部变量默认的存储类,可省略, 已废弃。

1.2 register

我们知道,程序代码需要加载到内存才可以运行。控制器通过访问编址的内存单元中的代码或数据,产生控制信号,控制运算器进行运算,寄存器存储中间结果以及内存地址、标志值等,而存储在磁盘上的文件可以是输入的数据源,也可以是输出的存储介质。在汇编层面,程序员可以将有限的一些数据安排存储到寄存器,在C/C++,也可以建议编译器将数据直接存储到寄存器。

1.3 static

static可以定义变量的存储属性(延长至程序存续期),也可以定义变量的连接属性(限制到文件域内,文件外不能访问)。

如果是修饰局部变量为static,因为其作用域是局部作用域内,局部作用域小于文件作用域,所以是延长其存储存续期到程序结束。

如果是修饰全局变量为static,因为全局变量的存续期本来就是达到程序结束,所以static的作用是限制其访问范围至本文件,在文件外禁止访问。

static也可以修饰类的成员。

1.4 extern

通常,C/C++变量的声明和定义是同时进行的,特殊情况是extern只是声明,声明此变量是定义在其他位置的全局变量。

此全局变量可以是文件外的位置,也可以是文件内的extern声明后(但必须是全局变量,所以只能是函数外)。

#include <iostream> using namespace std; extern int i; void f(){ cout<<i<<endl; } int main() { f(); cout<<i<<endl; } int i = 3;

1.5 mutable

mutable 说明符仅适用于类的对象。我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

class Test { private: int a; mutable int b; public: void func2() const { a++; // 编译错误,不允许修改a b++; // mutable修饰后允许修改 } };

2 Qualifier 限定符

主要关键字有:

unsigned, signed, long, short。

修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。

修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如:unsigned long int。

C++ 允许使用速记符号来声明无符号短整数或无符号长整数。您可以不写 int,只写单词 unsigned short 或 unsigned long,int 是隐含的。

3 Modifier 修饰符

主要关键字有:

const, volitile, restrict(C99)。

3.1 const

const 类型的对象在程序执行期间不能被修改改变,称为常量,所以只有一次赋值的机会,也就是在声明和定义变量的时候。

3.2 volitile

通常情况下,程序当中的一些变量是会临时存入寄存器当中的,编译器为了最大化地追求效率,在连续访问同一个变量时,便不去内存当中取这个数据,而会直接从寄存器当中将它读出,如此来增加效率。而如果你将一个变量声明为volitile就告诉编译器该变量是容易发生变化的,也就是说从寄存器当中和内存当中取得的数据可能是不一致的,所以编译器便不进行自动优化了,每次都老老实实从内存当中将数据取出。往往在多线程当中,将一些共享的数据设为volitile,可以保证数据的正确性。

3.3 restrict

restrict只能用于指针,并且表明指针是访问一个数据对象的唯一且初始的方式。告诉编译器被restrict修饰的指针所指向的对象,只能通过这个指针或基于这个指针的其他指针进行操作,即限制访问用restrict限制的指针指向的对象只能通过这个指针访问,这对编译器的优化很有好处。

void *memcpy( void * restrict dest ,const void * restrict src,sizi_t n) 这是一个很有用的内存复制函数,由于两个参数都加了restrict限定,所以两块区域不能重叠,即 dest指针所指的区域,不能让别的指针来修改,即src的指针不能修改. 相对应的别一个函数 memmove(void *dest,const void * src,size_t)则可以重叠。

4 VariableType 变量类型

主要关键字有:

int, char, bool, enum, float, double, union, struct, objcet。

5 Literal 字面量

可以使用的字面量有:

215u, 0xFeeL, 0213, 0x4b, 30ul, 314159E-5L, true, false, n, ooo, xhh . . ."hello, dear", "hello, dear", "hello, " "d" "ear"

-End-


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 如何用钢笔描边(ps怎么用钢笔画图)

下一篇: 赛尔号雷伊技能推荐(赛尔号怀旧服雷伊技能)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号