C++中类型定义同步实例化的构造名称?两种全局实例声明有何区别?
关于C++中类/结构体实例化的几个问题解答
好问题!咱们把你的疑问逐个拆解清楚:
1. MyObject1 和 MyObject2 是否存在区别?二者是否均为静态全局变量?
首先明确:二者都是静态全局变量,拥有完全相同的存储期和链接属性。全局作用域中声明的对象默认具有static存储期(生命周期从程序启动到结束)和内部链接(只能在当前编译单元访问),不管是哪种写法,这一点都不会变。
至于区别,仅仅是语法形式上的不同:
MyObject1是在MyClass的定义语句末尾直接声明并定义的实例;MyObject2是先完成MyClass的类型定义,再单独声明定义的实例。
从语义、行为和内存特性来看,两者没有本质区别:都会在程序进入main()之前完成构造,存储在静态存储区,生命周期覆盖整个程序运行过程。
2. 这种在类型定义时同时完成实例化的写法有没有特定名称?
C++标准里并没有给这种写法一个专门的官方术语,但在实践中,大家通常会称这种方式为**“类/结构体定义伴随实例化”**,或者更直白地说“在类型定义时直接创建实例”。
这种语法其实是从C语言继承来的(C语言里经常用struct { ... } obj;这种匿名结构体+实例的写法),在C++中扩展到了class类型上。它的好处是在定义类型的同时就能快速创建全局实例,尤其适合一些简单的聚合类型(aggregate type)。
3. struct/class定义后跟着的可选实例该如何称呼?
这种实例本质上就是全局作用域的类对象实例,如果要和单独声明的实例区分开,可以称它为**“伴随定义的全局实例”**或者“类型定义时声明的实例”。但要注意,它和普通全局实例的唯一区别就是声明位置和类型定义绑定在一起了,语义上没有任何特殊之处。
内容的提问来源于stack exchange,提问作者BlueTrin
相关产品推荐
相关产品推荐

