`
fireDragonpzy
  • 浏览: 460123 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

c++基础知识(八)C/C++中修饰符const、extern、static、volatile的用法

c++ 
阅读更多
1.const的用法:

为什么使用const?

采用符号常量写出的代码更容易维护;

指针常常是边读边移动,而不是边写边移动;

许多函数参数是只读不写的。

const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替)

用法1:常量

取代了C中的宏定义,声明时必须进行初始化。const限制了常量的使用方式,并没有描述常量应该如何分配。如果编译器知道了某const的所有使用,它甚至可以不为该const分配空间。最简单的常见情况就是常量的值在编译时已知,而且不需要分配存储。―《C++ Program Language》

用const声明的变量虽然增加了分配空间,但是可以保证类型安全。

C标准中,const定义的常量是全局的,C++中视声明位置而定。

用法2:指针和常量

使用指针时涉及到两个对象:该指针本身和被它所指的对象。将一个指针的声明用const“预先固定”将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指对象声明为常量,必须使用声明运算符*const。

所以出现在 * 之前的const是作为基础类型的一部分:

char *const cp;   // 到char的const指针
char const *pc1;   // 到const char的指针
const char *pc2; // 到const char的指针(后两个声明是等同的)

从右向左读的记忆方式:

cp is a const pointer to char.
pc2 is a pointer to const char.

用法3:const修饰函数传入参数

将函数传入参数声明为const,以指明使用这种参数仅仅是为了效率的原因,而不是想让调用函数能够修改对象的值。同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。

通常修饰指针参数和引用参数:

void Fun( const A *in); // 修饰指针型传入参数
void Fun(const A &in);   // 修饰引用型传入参数

用法4:修饰函数返回值

可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。

用法5:const修饰成员函数

const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数;

const对象的成员是不能修改的,而通过指针维护的对象却是可以修改的;

const成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检查。


2.static的用法:

静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。

静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。

用法1:函数内部声明的static变量,可作为对象间的一种通信机制

如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义时初始化。

用法2:局部静态对象

对于局部静态对象,构造函数是在控制线程第一次通过该对象的定义时调用。在程序结束时,局部静态对象的析构函数将按照他们被构造的相反顺序逐一调用,没有规定确切时间。

用法3:静态成员和静态成员函数

如果一个变量是类的一部分,但却不是该类的各个对象的一部分,它就被成为是一个static静态成员。一个static成员只有唯一的一份副本,而不像常规的非static成员那样在每个对象里各有一份副本。同理,一个需要访问类成员,而不需要针对特定对象去调用的函数,也被称为一个static成员函数。

类的静态成员函数只能访问类的静态成员(变量或函数)。

3.extern的用法

extern可以声明其他文件内定义的变量。在一个程序里,一个对象只能定义一次,它可以有多个声明,但类型必须完全一样。如果定义在全局作用域或者名字空间作用域里某一个变量没有初始化,它会被按照默认方式初始化。

将变量或函数声明成外部链接,即该变量或函数名在其它函数中可见。被其修饰的变量(外部变量)是静态分配空间的,即程序开始时分配,结束时释放。

在C++中,还可以指定使用另一语言链接,需要与特定的转换符一起使用。

extern “C” 声明语句
extern “C” { 声明语句块 }

extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量。

static 表示静态的变量,分配内存的时候,存储在静态区,不存储在栈上面。static 作用范围是内部连接的关系,和extern有点相反,它和对象本身是分开存储的,extern也是分开存储的,但是extern可以被其他的对象用extern 引用,而static 不可以,只允许对象本身用它。

4.volatile的用法

类型修正符(type-modifier),限定一个对象可被外部进程(操作系统、硬件或并发进程等)改变。volatile与变量连用,可以让变量被不同的线程访问和修改。

声明时语法:

int volatile vInt;

常用于像中断处理程序之类的异步进程进行内存单元访问。

除了基本类型外,对用户定义类型也可以用volatile类型进行修饰。

注意:可以把一个非volatile int赋给volatile int,但是不能把非volatile对象赋给一个volatile对象。

一个有volatile标识符的类只能访问它接口的子集,一个由类的实现者控制的子集。用户只能用const_cast来获得对类型接口的完全访问。此外,volatile向const一样会从类传递到它的成员。


摘自:http://hi.baidu.com/shirdrn/blog/item/47dcbf6d84847cfd431694dd.html
分享到:
评论

相关推荐

    const extern static volatile 小结

    `const` 关键字在 C/C++ 语言中用于定义常量,即其值在程序运行期间不可更改的变量。`const` 可以与多种数据类型结合使用,例如 `const int x = 10;` 表示定义了一个整型常量 `x`,其值为 10 并且不可改变。 1. **...

    const,extern,static,volatile的使用

    ### const、extern、static、volatile ...通过以上的介绍可以看出,`const`、`extern`、`static` 和 `volatile` 这四个关键字在 C 和 C++ 中有着广泛的应用。正确地使用这些关键字可以极大地提高代码的质量和可维护性。

    extern_volatile等修饰符的用法

    "extern_volatile等修饰符的用法" 在C++语言中,extern、volatile、const、static等...extern、volatile、const、static等修饰符都是C++语言中的重要组成部分,正确使用它们可以提高代码的可读性、安全性和可维护性。

    C语言中的类型修饰符

    本文将详细介绍C语言中的三种重要类型修饰符:`const`、`static` 和 `volatile`。 #### 二、`const`修饰符详解 `const`修饰符主要用于声明一个或多个变量为常量,即一旦赋值之后,其值不能被修改。`const`修饰符...

    c语言面试经常提问到的几个修饰符

    static:修饰符:修饰变量,函数。作用域:变量仅仅在本文件可见,函数在本文件可以被调用。static在函数内部定义的话,分配在堆中,数值保存在data段,而不是在栈中,而且只赋值一次。 extern:修饰符:修饰变量,...

    C#修饰符

    C#修饰符 C#语言中,修饰符是用来定义类、方法、属性、字段等成员的访问权限、行为和特性的关键字。...通过学习C#和Java语言中的修饰符,我们可以更好地理解和使用这些关键字,从而编写更加高效、安全、灵活的程序。

    C++中的函数修饰符深入讲解

    在C++编程语言中,函数修饰符是用来控制函数行为的关键字。这些修饰符可以在函数声明时添加,以改变函数的特性、行为或访问权限。在本文中,我们将深入探讨C++中的函数修饰符,分为函数名前和函数名后两大类别。 ##...

    C++ 基础知识总结_终稿_1241

    7. `extern "C"`:用于链接C语言编译的代码,保证名字修饰的一致性。 8. `struct`与`typedef struct`:`struct`定义结构体类型,`typedef`可以为结构体创建别名,简化类型使用。 以上就是C++基础知识的一些核心要点...

    C++程序设计基础知识.ppt

    关键词是具有特定含义的保留字,例如数据类型修饰符(`const`、`volatile`)、访问控制(`private`、`public`)、存储类型(`static`、`extern`)和流程控制(`if`、`for`、`while`)。除此之外,还有如`friend`、`...

    C&C++面试知识点总结.pdf

    文章提到的extern和extern "C"关键字用于声明和定义全局变量以及函数,在C++中使用extern "C"可以防止C++的名称修饰,使得C++代码能够调用C语言的库函数。而#define是一个预处理指令,用于宏定义,可以用于定义常量...

    c++笔记,自己对比赛的知识点总结

    本资源摘要信息涵盖了C++语言的基础知识点,包括环境配置、语言结构、数据类型、变量、常量、修饰符、存储类、运算符、循环、判断、函数、数组、字符串、指针、引用、面向对象编程等。 一、环境配置 在开始编写C++...

    从C和C++到Java.pdf

    C++同样支持C语言的特性,并引入了const和volatile等限定符,以及extern "C"语法用于C和C++的混合编程。extern "C"语法允许C++代码调用C语言库,这主要是因为C++和C在名字修饰(name mangling)上的差异。C++为了...

    C++指针及数组应用

    在C++中,还有很多其他的类型修饰符,例如:const、volatile、extern等。这些类型修饰符可以用于定义变量的性质和行为。 例如:const int a = 10;定义了一个常量a,值为10。volatile int b;定义了一个volatile变量b...

    C++_面试题(服务器编程、网络编程)

    4. 变量修饰符:C++ 中有多种变量修饰符,例如 auto、static、volatile、mutable、extern 等。auto 指定数据存储在栈中,static 指定数据存储在静态空间,全局变量默认为 extern 属性。 5. 数据类型隐式转换:C++ ...

    c++ 服务器面试题

    C++中,函数修饰符如`const`、`volatile`用于描述函数的行为特性。 - `const`: 表示函数不会修改调用它的对象的状态。 - `volatile`: 表示变量的值可能会在任何时候发生变化,即使没有代码明确地改变它。 #### ...

    C++关键字和操作符替代名

    ### C++关键字和操作符替代名 #### 概述 在C++编程语言中,关键字是具有特定含义的预定义标识符,它们被语言保留用于构成语法结构的关键部分。此外,C++还支持一系列操作符,包括算术、比较、逻辑等类型。为了提高...

    50个常见的c与c++面试题

    ### C/C++基础知识点 1. **extern关键字**:用于声明函数或变量的作用域。当它用于函数声明时,表示该函数在其他文件中定义。 2. **基本数据类型**:C/C++中的基本数据类型包括`bool`, `int`, `float`, `char`等。...

    C/C++笔试题

    `volatile` 是一个关键字,在 C/C++ 中用来修饰变量。当一个变量被声明为 `volatile` 类型时,编译器不会对它进行优化(例如,将它保存在寄存器中而不是内存中),以确保每次对该变量的读取都从内存中获取最新的值。...

Global site tag (gtag.js) - Google Analytics