C/C++中的const ,static

一、const

  在C++中:

  1、常对象:创建对象时添加const关键字,这个对象就不可以再修改,就有了常属性,就意味着整个对象所有变量不能更改

  2、常对象不能调用普通函数,调用成员函数就相当于把对象的this指针给了他,就有被修改的风险

  3、常对象只能调用常函数(函数体前加关键字叫常函数),普通对象也能调用常函数,常函数就相当于对this指针添加了const属性

  4、常函数与普通函数可以构成重载,不会冲突

  5、如果有成员确实需要修改,他又被const修饰,可以对成员添加一个关键字mutable,这样即使是常对象调用了常函数依然可以修改成员

  C:

    const :常量,为变量保存添加一种保护,保护变量不能被显示修改,提高程序的安全性,当程序没必要修改参数值时,应该加const属性;
    const 可以定义常量,const修改初始化过的全局变量就是常量;

二、static

  C++:静态成员与静态成员函数

    1、类成员被static修饰,就会存储在bss段(此段是由编译器存放的而且大小是固定的),在程序中动态的创建对象时它的静态成员就无法创建,所有的类对象就共享一个静态成员

    2、静态成员只能在类中声明不能在类中定义(必须在类外定义)  类型  类名::静态成员名

    3、静态成员就是声明在类中的全局变量,在任何位置都可以使用  类名::静态成员名 进行访问

    4、静态成员函数:类中的成员函数被static修饰后就变成静态成员函数,所有成员共享一份静态成员函数

    5、静态成员函数不会传递this指针,不通过对象也能调用静态成员函数 类名::静态成员函数(参数)

  C:

    static 
      修饰全局变量时,作用域会从整个程序变为他所在的.c文件内;
      1、静态局部,块:
        存储位置会由栈改为静态段;生命周期会改为从定义开始到程序结束;但是使用范围不变;默认值为0;只能初始化一次;

    静态函数:
      static int func(int num);
      static会把外部函数变为内存函数,只能在他所在的.c文件内;

      static修饰全局变量和函数的好处,可以防治与其他函数,变量重名冲突

原文地址:https://www.cnblogs.com/gumpzlc/p/9557533.html

时间: 2024-10-02 20:41:34

C/C++中的const ,static的相关文章

Objective-C中的const ,extern,static

一.const 1>对于const,记住关键的一点,它只是修饰右边的变量. 例如: - (void)viewDidLoad { [super viewDidLoad]; // const两种用法 // const:修饰基本变量p // 这两种写法是一样的,const只修饰右边的基本变量b const int b = 20; // b:只读变量 int const b = 20; // b:只读变量 // const修饰指针变量访问的内存空间,修饰的是右边*p1, // 两种方式一样 const

C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化

C++类有几种类型的数据成员:普通类型.常量(const).静态(static).静态常量(static const).这里分别探讨以下他们在C++11之前和之后的初始化方式. c++11之前版本的初始化 在C++11之前常规的数据成员变量只能在构造函数里和初始化列表里进行初始化.const类型的成员变量只能在初始化列表里并且必须在这里进行初始化.static类型只能在类外进行初始化.static const类型除了整型数可以在类内初始化,其他的只能在类外初始化.代码如下: class A {

php中的const和static

1.const是类中的常量,类外用define定义常量 (var用来定义类内的变量,有添加控制访问限制的修饰符则可以省略 eq:public protected) 类外: 类外的常量属于全局,任何位置都可以访问,任意函数内部都可以访问外部定义的常量,而且常量一被定义就不可修改或者撤销 类内: 类内的常量属于当前这个类,不属于类的实例对象,因此不能通过$this->访问,同样的常量一被定义就不能修改或者撤销. 类内可以通过 self:: 来访问常量,类外则通过 类名:: 访问 2.const只可以

C++总结:C++中的const和constexpr

C++中的const可用于修饰变量.函数,且在不同的地方有着不同的含义,现总结如下. const的语义 C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象的常量性的操作都视为error. 对象的常量性可以分为两种:物理常量性(即每个bit都不可改变)和逻辑常量性(即对象的表现保持不变).C++中采用的是物理常量性,例如下面的例子: 1 2 3 4 5 6 7 struct A {     int *ptr; }; int k = 5, r = 6;

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

详解C和C++中的const关键字

在讲下面的内容之前,要先看看这篇文章const.static变量的存储位置 一.C中的const 作用:(1)可以定义const常量,具有不可变性. (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患. (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改. 同宏定义一样,可以做到不变则已,一变都变! (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. 还是上面的例子,如果在函数体内修改了i,编译器就会报错: (5) 可以节省空间,避免不必要的内存

03 - const static extern

const是一个C语言的关键字,它限定一个变量不允许被改变.使用const可以在一定程度上提高程序的安全性和可靠性,再者在看别人的代码作品的时候也可以有助于清晰理解const所起的作用. 1.const和#define的区别 (1)编译器处理的方式不相同 define定义的宏是在预处理阶段展开的,而const定义的常量则是在编译阶段使用的 (2)类型和安全检查不同 define宏没有类型,并且不做任何的类型检查,仅仅是展开 const常量具有具体的类型,在编译阶段会执行类型检查 (3)存储方式不

类内const static(static const)成员变量初始化问题

在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题. 查阅了许多资料,发现VC环境下,只允许const static成员变量在类外初始化,这个应该是编译器遗留下的bug(你也可以说是要求严格). 在其他编译器下,整型以及枚举类型的const static成员变量是允许在声明的同时进行初始的,其中整型包括int.short.long.char等,非整型是指浮点型 包括float.double等.

iOS之const,static,extern简介

const,static,extern简介 一.const与宏的区别: • const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. ? 编译时刻:宏是预编译(编译之前处理),const是编译阶段. ? 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误. ? 宏的好处:宏能定义一些函数,方法. const不能. ? 宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换. • 注意:很多Blog都说使用宏,

c# const, static 和readonly关键字的理解

关于c#的const, static, readyonly关键字修饰成员变量时的区别,下面通过一个简单的例子来说明: 1 //SomeType.cs 2 3 using System; 4 5 public sealed class SomeType 6 { 7 public Int32 Id = 1; 8 9 public const Int32 constId = 100; //IL .field public static literal int32 constId = int32(0x0