zoukankan      html  css  js  c++  java
  • const在c/c++中的区别

     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5  const int a = 1;
     6  const int b = 2;
     7  int array[ a + b ] = {0};
     8  for (int i = 0; i < sizeof array / sizeof *array; i++)
     9  {
    10         cout << array[i] << endl;
    11  }
    12 }
    13 在可以通过编译,并且正常运行.但稍加修改后,放在C编译器中,便会出现错误:
    14 #include <stdio.h>
    15 int main()
    16 {
    17  int i;
    18  const int a = 1;
    19  const int b = 2;
    20  int array[ a + b ] = {0};
    21  for (i = 0; i < sizeof array / sizeof *array; i++)
    22  {
    23         printf("%d",array[i]);
    24  }
    25 }

    1:在c中,const不是常量,他只能说是一个不能改变的变量(注意是变量),而且数组的下标必须是常量,不能是变量。c编译器不能把const看成看成一个编译期间的常量,因为他在内存中有分配,c编译器不知道他在编译期间的值。

    2:在c中,const int a;是可以的,因为这只是声明一个变量,告诉编译器,我这里是声明,在别的地方有内存分配,

    3:c++中const默认是内部链接,c默认是外部链接,为了起到和c语言一样的效果,c++需要将const修饰为extern,因为extern优先级高于const,所以变量会被变为extern外部链接,起到和c语言一样的效果

    4:在c++中是否为const分配内存空间要看具体情况,如果被声明为extern或者取const变量地址,就需要为const变量分配空间

    5:当你在自己的文件中使用const的时候,c++不会为你的const常量分配空间,因为这是一种优化措施,没有必要浪费空间去存储一个常量,此时const int a=5 就相当于#define a 5,当你在其他文件使用的时候,就需要分配内存了,同样在程序内部引用的时候,也需要分配内存,因为这两者都是采用寻址的技术去使用的,不分配内存就没有地址

  • 相关阅读:
    Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
    purge
    死锁相关 变量 与 PURGE 线程停止
    percona-xtrabackup 文档
    innobackupex的备份和恢复
    innodb_lru_scan_depth
    innobackupex 恢复实验
    innodB的隐式锁
    Linux内存管理原理 与文件读写 图 相当详细
    MySQL数据库InnoDB存储引擎中的锁机制
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6399832.html
Copyright © 2011-2022 走看看