C++中const和static的作用

const
不考虑类的情况
  • const 常量在定义时必须初始化,之后无法更改。
  • const 形参可以接收 const 和非 const 类型的实参,例如:
// i 可以是 int 型或者 const int 型
void fun(const int i){
	//函数实体 ...
} 
考虑类的情况
  • const 成员变量:不能在类定义外部初始化,只能通过构造函数初始化列表进行初始化,并且必须有构造函数;不同类对其 const 数据成员的值可以不同,所以不能在类中声明时初始化。
  • const 成员函数:
  1. const 对象只能调用 const 成员函数,不可以调用非 const 成员函数;非 const 对象既可以调用非 const 成员函数,也可以调用 const 成员函数。
  2. const 成员函数不可以调用其它非 const 成员函数,因为 const 成员函数不可以被改变,而非 const 成员函数可以改变,如果 const 成员函数调用了非 const 成员函数,非 const 成员函数就有可能会破坏 const 成员函数的常性。反之,非 const 成员函数是可以调用其它 const 成员函数的,因为它不会改变 const 成员函数。
static
不考虑类的情况
  • 隐藏。所有不加 static 的全局变量和函数具有全局隐藏性,可以在其它文件中使用,加了 static 之后只能在该文件所在的编译模块中使用。
  • 默认初始化为 0,包括未初始化的全局静态变量和局部静态变量,都存在全局未初始化区。
  • 静态变量在函数内定义,始终存在,且只进行一次初始化,具有记忆性,其作用范围与局部变量相同,但是函数退出后仍然存在但不能使用。
考虑类的情况
  • static 成员变量:只与类关联,不与类的对象关联。定义时要分配空间,不能在类声明中初始化,必须在类外初始化,初始化时不需要标志为 static;static 成员变量可以被非 static 成员函数任意访问。
  • static 成员函数:不具有 this 指针,无法访问类对象的非 static 成员变量和非 static 成员函数;不能被声明为 const 、virtual 和 volatile;static 成员函数可以被非 static 成员函数任意访问。
  • static 对象在函数进入主程序之前就已经被分配空间并创建。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: const关键字用于声明一个常量,即该变量的值不能被修改。在函数const可以用于指定函数参数或返回值为常量,以保证函数内部不会修改这些值。 static关键字用于声明静态变量或静态函数。静态变量的生命周期与程序的生命周期相同,即在程序运行期间一直存在,而不是在函数调用结束后被销毁。静态函数只能在当前文件被调用,不能被其他文件调用。静态变量和函数的作用域仅限于当前文件,不会影响其他文件。 ### 回答2: conststatic是C语言两个非常重要的关键字,它们都具有不同的作用和用途。 const是常量的意思,它用于修饰变量,表示这个变量的值是不可改变的,一旦被初始化为某个值,便不能再被修改。const通常用于声明常量、函数参数、返回值等,在程序使用const可以避免无意修改变量的值,减少程序出错的可能性,提高代码的可读性和可维护性。例如: ``` const int a = 10; // 声明一个整型常量a,值为10,不可变 void func(const int b); // 声明一个函数,参数b为整型常量,不可改变 const int func2() { // 声明一个函数,返回值为整型常量,不可改变 return 20; } ``` static是静态的意思,它同样也用来修饰变量或函数,表示它们的作用域仅限于当前文件,对于其它文件不可见。static常用于模块化程序设计,可以避免文件之间的命名冲突,提高程序的可维护性。在函数内部使用static修饰局部变量,可以将其生命周期延长到整个程序运行期间,这样就可以保证在函数被多次调用时,这个变量的值不会被初始化。例如: ``` static int count = 0; // 声明并初始化静态变量count,值为0,仅限当前文件 void func() { static int a = 0; // 只初始化一次,函数被多次调用时,变量a的值不会被初始化 a++; count++; printf("a:%d, count:%d\n", a, count); } ``` 总的来说,conststatic两个关键字在C语言非常常用,它们不仅简化了程序的编写,还提高了程序的可读性和可维护性。可以说是日常编程不可或缺的一部分。 ### 回答3: conststatic都是关键字,在C语言拥有各自的作用const用于定义常量,表示该变量的值在程序执行期间不可被改变。定义常量有以下好处: 1. 程序更加安全:避免了不小心改变变量值的情况,防止程序的逻辑错误。 2. 程序的可读性更高:定义常量可以为程序添加注释,解释每个常量代表的含义。 3. 更加节省空间:定义常量可以直接在内存存储常量的值,节省了内存空间。 定义常量的方式有两种:第一种是使用define,该方式定义时不需要指定变量类型,只需要指定变量名和值。第二种是使用const关键字,需要指定变量类型,且定义时需要赋值。 static可以用于两种声明:变量声明和函数声明。 当static用于变量声明时,表示该变量仅在定义该变量的源文件可见,即该变量的作用域仅限于文件级别。这种变量在内存上是静态分配的,其生命周期是整个程序执行期间。该特性拥有以下好处: 1. 可以避免变量名被其他文件的定义所污染。 2. 定义的变量不会被意外地修改,变量在文件内部被访问时更加安全。 3. 可以防止重复定义变量,在程序进行链接时,编译器会通过链接器解决该问题。 当static用于函数声明时,表示该函数也只在定义该函数的源文件可见。该方式是为了避免其他文件无意调用该函数,而导致程序错误的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值