精华内容
下载资源
问答
  • C++11 静态 局部变量 初始化 线程安全

    标准关于局部静态变量初始化,有这么几点要求:

    1. 变量在代码第一次执行到变量声明的地方时初始化。
    2. 初始化过程中发生异常的话视为未完成初始化,未完成初始化的话,需要下次有代码执行到相同位置时再次初始化。
    3. 在当前线程执行到需要初始化变量的地方时,如果有其他线程正在初始化该变量,则阻塞当前线程,直到初始化完成为止。
    4. 如果初始化过程中发生了对初始化的递归调用,则视为未定义行为
    展开全文
  • c++全局变量和静态局部变量初始化的时间 1.全局变量初始化在主函数之前 2.静态局部变量初始化在第一次调用这个静态局部变量之前 #include <iostream> using namespace std; class A { public: A(int a):m_a...

    c++全局变量和静态局部变量初始化的时间

    1.全局变量初始化在主函数之前
    2.静态局部变量初始化在第一次调用这个静态局部变量之前

    #include <iostream>
    using namespace std;
    
    class A
    {
    public:
        A(int a):m_a(a){cout << "A(int a):" << m_a << endl;}
        ~A(){cout << "~A():" << m_a <<endl;}
    
    private:
        int m_a;
    };
    
    A a(10);
    
    void fun()
    {
        static A a(5);
    }
    
    int main()
    {
        cout << "--------------------------" << endl;
        fun();
        return 0;
    }
    
    

    编译结果为:
    在这里插入图片描述
    可以看到全局变量在调用主函数之前已经初始化了,静态局部变量在调用之前进行初始化。
    全部变量最后才被析构。

    展开全文
  • 全局变量和局部变量初始化问题

    千次阅读 2019-08-23 16:08:42
    这里需要分清一个事实,是变量系统都会默认给初始化,只不过全局变量默认初始化为0,而局部变量初始化为随机数,这个随机数用不了,后面会验证。现在,我们要讨论的是程序猿或者程序媛需不需要给全局变量和局部...

    总结 

    这里需要分清一个事实,是变量系统都会默认给初始化,只不过全局变量默认初始化为0,而局部变量被初始化为随机数,这个随机数用不了,后面会验证。 现在,我们要讨论的是程序猿或者程序媛需不需要给全局变量和局部变量赋初值的问题。因为全局变量的初始值是系统默认的且是可使用的,因此,全局变量一般不需要自己去赋初值,不过为了养成良好的代码习惯,最好还是赋初值,定义的全局变量在代码中未被使用,编译器也不会报错。局部变量被定义,没有赋初值,系统会抛出警告“xxx未使用的局部变量”,同时未赋初值的局部变量,是不能在其它地方作为右值使用的,系统会抛出错误“使用了未初始化的局部变量”。因此,局部变量如果被定义,就必须要赋初值,下面通过一段代码来验证。

    #include <iostream>
    #include <string>
    #include <vector>
    
    int a;
    bool b;
    char c;
    double d;
    
    std::string str;
    std::vector<int> vec;
    
    int main()
    {
    	int a2;
    	bool b2;
    	char c2;
    	double d2;
    	std::string str2;
    	std::vector<int> vec2;
    
    	//Microsoft C++ 异常: std::out_of_range
    	//vec.at(0) = 1;
    	//vec2.push_back(1);
    	/*
    	std::cout << "a:"<<a << std::endl;
    	std::cout << "b:"<<b << std::endl;
    	std::cout << "c:"<<c << std::endl;
    	std::cout << "d:"<<d << std::endl;
    	std::cout << "a2:"<< a2 << std::endl;
    	std::cout << "b2:"<< b2 << std::endl;
    	std::cout << "c2:"<< c2 << std::endl;
    	std::cout << "d2:"<< d2 << std::endl;
    	*/
    	system("pause");
    	return 0;
    }

    全局变量 

    我把所有的全局变量都添加到监视中,调试后可以发现,普通数据类型变量的值系统会默认初始化为0。int类型初始化为0,bool类型初始化为false,char类型初始化为‘\0’,double类型初始化为0.00000000000000000。

    局部变量

    在局部变量窗口中可以看到,局部变量的初始化值都是随机的。普通数据类型中,int类型初始化为-858993460,bool类型初始化为true (204),char类型初始化为-52 '?',double类型初始化为-9.2559631349317831e+61。

    编译时,会给出警告信息:

    通过两个窗口数据可以看到,string类型和vector类型的变量初始化是一样的,string的size为0,capacity为15;vector的size为0,capacity也为0。

    把主函数里面这段代码的注释取消,发现int、bool、double的打印值都为0,char的打印值为空,也就是‘\0’。

    std::cout << "a:"<<a << std::endl;
    std::cout << "b:"<<b << std::endl;
    std::cout << "c:"<<c << std::endl;
    std::cout << "d:"<<d << std::endl;

     

    把主函数里面这段代码注释取消,直接Game over,系统报错。

    std::cout << "a2:" << a2 << std::endl;
    std::cout << "b2:" << b2 << std::endl;
    std::cout << "c2:" << c2 << std::endl;
    std::cout << "d2:" << d2 << std::endl;

    这里多说两句关于vector容器初始化的:

    size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。

    capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间。

    这两个属性分别对应两个方法:resize()和reserve()。

    使用resize(),容器内的对象内存空间是真正存在的。

    使用reserve()仅仅只是修改了capacity的值,容器内的对象并没有真实的内存空间(空间是"野"的)。

    1、如果对容器直接赋值,会报out_of_range,也就是越界。

    vec.at(0) = 1;

    2、如果没有对容器赋初值,打印其中一个,也会报out_of_range,因为vector的size为0,capacity也为0。

    std::cout << "vec:" << vec.at(0) << std::endl;

    如果要打印第一个值,需要先resize一下,不能用reserve,此时的值为0,但还是不能赋值

    vec.resize(1);
    //vec.reserve(1);
    std::cout << "vec:" << vec.at(0) << std::endl;

    3、如果要赋值,需要先往vector里面push_back值,这个不需要resize都可以

    vec.push_back(1);
    std::cout << "vec:" << vec.at(0) << std::endl;
    vec.at(0) = 2;
    std::cout << "vec:" << vec.at(0) << std::endl;

     

    展开全文
  • Java 局部变量初始化问题

    千次阅读 2018-06-08 09:05:49
    Java 中类的成员变量会被自动初始化,但是方法里头的局部变量不会被自动初始化   上图中 i 是成员变量,默认会自动初始化,所以直接使用没有报错。但是 j 是方法中的局部变量,没有初始化直接使用会出现编译...

    Java 中类的成员变量会被自动初始化,但是方法里头的局部变量不会被自动初始化

    code
      上图中 i 是成员变量,默认会自动初始化,所以直接使用没有报错。但是 j 是方法中的局部变量,没有初始化直接使用会出现编译错误。当然如果没有使用 j 而只是声明了却未初始化,那么只会有警告,因为编译器希望你接下来能对 j 进行初始化。

      注意:boolean 类型默认值是 false
    展开全文
  • (1)C语言从语法上规定全局变量只能用常量表达式来初始化,因此下面这种全局变量初始化是不合法的: int minute = 360; int hour = minute / 60; (2)如果全局变量在定义时不初始化则初始值是0,如果局部...
  • 局部变量初始化议题讨论

    千次阅读 2007-02-21 11:03:00
    局部变量初始化议题...非局部变量初始化规则和现实中跨编译单元的初始化顺序依赖的几种解决方案。 文中的内容都源自一些C++书籍(BS的TCPL,Sutter的Exceptional系列),库的源代码和MSDN。 1.非局部变量的定义 
  • 今天研究了一下c++中全局变量和局部变量初始化时的赋值情况,发现全局变量和局部变量会有所不同,下面是我的测试结果: 全局变量: #include &lt;iostream&gt; using namespace std; float testFloat; ...
  • 静态局部变量初始化问题

    千次阅读 2014-03-13 03:14:10
    在C中对静态变量初始化必须使用常量,在C++中却可以使用变量初始化静态变量。 C里面只允许静态初始化, C++允许动态初始化,可以参考C++标准3.6.2节 静态变量没有初始化时,与全局变量一样,默认值为0; 非...
  • 静态局部变量初始

    千次阅读 2019-03-07 11:17:06
    原以为会每次调子函数时,都会初始化静态局部变量。实际并非如此 #include void key(void) { //static unsigned char key_up =1; unsigned char key_up =1; printf("key_up = %d \n", key_up); key_up = ...
  • Java全局变量和局部变量初始化问题

    千次阅读 2020-02-21 23:24:53
    我们先来看一个比较的例子,最近在知乎看到的帖子。... //类的成员变量 public static void main(String[] args) { TestDemo td =new TestDemo(); //默认的构造方法 System.out.println(td.a); ...
  • public class DatabaseHandler extends SQLiteOpenHelper { // All Static variables // Database Version ...提示说的是局部变量TABLE_LOCATIONLABLES可能没有被初始化?可是我初始化了的呀,这个错误如何发生的呢?
  • 全局变量与局部变量初始化问题

    千次阅读 2013-11-20 08:51:30
    ),而定义为局部变量时,系统不会自动初始化变量,我们必须手动对变量进行初始化( 无论是内置类型还是自定义类型 ),否则得到的结果可能和我们预期的不一致,甚至导致程序出错。 原文地址:...
  • ARM局部变量初始

    千次阅读 2013-09-13 14:06:14
    1、函数内部的局部变量如何初始化,如以下程序中的cost_a、const_b、const_c: extern int main( void ) { uint32_t const_a = 0x12345678; uint32_t const_b = 0x87654321; uint32_t const_c = 0x04; ...
  • System.out.println("string类型全局变量初始化值"); } String dd; // System.out.println(dd); } } 首先应该了解的是,在类中声明的变量叫做全局变量(global variable),在方法中声明的变量叫做局部...
  • 在C语言里,全局变量如果不初始化的话,默认为0,也就是说在全局空间里:int x =0; 跟 int x; 的效果看起来是一样的。但其实这里面的差别很大,强烈建议大家所有的全局变量都要初始化,他们的主要差别如下: 编
  • Java 成员变量有初始值,而局部变量没有初始值。 如下所示,代码不能编译通过 publicstaticvoidmain(String[] args){ String s; System.out.println("s="+s); } 转载于:...
  • c语言局部变量默认初始

    千次阅读 多人点赞 2018-04-09 15:29:48
    C语言中,定义局部变量时如果未初始化,则值是随机的,这是为什么呢?定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的...
  • 局部变量需要初始

    千次阅读 2018-03-20 09:26:24
    提示:没有初始化值 java中成员变量和局部变量初始化 为什么全局变量无须初始化,局部变量必须初始化?
  • 如上图所示, 1、全局int变量(包括有static前缀的)未初始化,默认值是0。 2、局部int变量未初始化,默认值未知。...解释:局部变量是存在栈中,数据量大,且生命周期短,若为局部变量进行初始化,开销很大。 ...
  • 1.成员变量自动初始化对于类的成员变量。不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值public class Copy { static String s; public static void main(String[] args)...局部变量必须手动初

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 378,852
精华内容 151,540
关键字:

局部变量初始