• c++ 存储连续性,作用域和链接性注意点


    1.自动变量使用栈(LIFO后进先出);

    2.静态持续变量

    ①外部链接性(跨文件访问);

    ②内部链接性(只在当前文件中访问);

    ③无链接性(只在当前代码块中访问);

    #include "stdafx.h"
    
    int global = 1000;//外部链接性(跨文件)
    static int one_file = 50;//内部链接性(当前文件)

    const int num=30;//加入了const,由外部链接性变为了内部链接性;如放入头文件中,则变为了外部链接性 extern const int b=9;//由于加入了extern,覆盖了默认的内部链接性,链接性变为外部,使用时同样要加extern进行声明; int main() { return 0; } void func() { static int count = 0;//无链接性,只能在当前代码块中使用,但是与llama不同的是没有执行函数也存在于内存中。 int llama = 0; }

     3. 静态持续变量会被初始化为0;

    4. 

    ①静态持续性,外部链接性

    (1)单定义规则:变量只有一次定义,外部使用该变量的文件中都必须声明它;

            定义声明:给变量分配存储空间,如未进行初始化,则初始化为0;

       引用声明:引用已有的变量,使用关键字extern,且不进行初始化

     (2) ::variable 可以在存在全局变量与局部变量时使用全局变量;
    #include "stdafx.h"
    #include<iostream>
    
    using namespace std;
    
    int global = 1000;//外部链接性(跨文件)
     
    
    int main()
    {
    	int global = 500;
    	cout << "global:" << global << endl;//使用局部变量
    	cout << "global:"<<::global<< endl;//使用全局变量
        return 0;
    }
    

    (3)const char* const months[12]={"January","February","March","April","May",...}

    第一个const 防止字符串被修改,第二个const确保数组中的每个指针的指向不变;

    ②静态持续性,内部链接性

    (1)不能违反单定义规则(p314),但静态外部变量会隐藏常规外部变量;

    ③ 静态存储持续性,无链接性

    在函数中被初始化的静态变量,只进行一次初始化,即只在程序运行时被设置为0!参看p316例子!

    ④ 静态外部变量如果加const修饰,则变为静态内部变量,这种情况一般放到头文件中定义(p318);

    ⑤普通函数的链接性为静态外部的,所以只能有一处定义,不能违反单定义规则,可以使用static将链接性修改为内部的。

     注意内联函数不受单定义规则的约束,所以可以放在头文件中,只要保证内联函数的定义严格相同即可。

     5.动态内存的注意点

    ① 指针是变量,new出来的是内存地址,注意不能让变量结束了而没有用delele释放内存(p320);

    ②定位new运算符与普通new运算符的区别:

    普通new:在heap处创建,需要用delete释放;

    定位new:需要先行创建静态内存buffer,不需要使用delete释放。独立控制好buffer即可(自动释放:自动管理释放,还是手动释放:new出来的)【p323】;

    ③  (void *)的使用方法【p324】

    new出来的地址可以强制转换成(void *),来赋值给任何指针类型;【p322 例9.10】

  • 相关阅读:
    一秒解决element容器布局显示内部调节框的问题
    操作管理员
    Linux_网络基础管理
    如何解决在WordPress安装Redis插件时需要输入FTP问题?
    如何在我的EC2实例状态更改时获取自定义电子邮件通知
    利用S3fs在Amazon EC2 Linux实例上挂载S3存储桶
    源码安装Apache(httpd)
    Linux_源码安装包管理理论概述
    Linux_yum命令详解
    Linux_yum仓库管理
  • 原文地址:https://www.cnblogs.com/liutianrui1/p/13343620.html
Copyright © 2020-2023  润新知