C++中定义struct后紧跟变量是创建对象还是类内成员?
C++ 结构体声明语法解答
你给出的代码均是在结构体外部创建对应类型的对象和指针,不会将变量定义到结构体内部,具体拆分解释如下:
第一段代码解析
struct Sales_data {/**/ } acum, trans, * salesptr = nullptr;
这是C++支持的「定义结构体类型的同时声明变量」的简化语法,等价于拆分写的两行代码:
// 第一步:定义Sales_data结构体类型 struct Sales_data {/**/ }; // 第二步:在当前作用域声明该类型的2个对象和1个指针 Sales_data acum, trans, *salesptr = nullptr;
这里的acum、trans是Sales_data类型的实例对象,salesptr是指向Sales_data类型的空指针,三个变量都属于你编写代码的当前作用域,不属于Sales_data结构体的内部成员。
第二段代码解析
struct Salees_data {}; Salees_data accumm, transs, * salessptr;
这是最常规的「先定义结构体类型,再单独声明变量」的写法,逻辑和上面拆分后的写法完全一致。
注意:这里你拼写的是
Salees_data(比第一段的Sales_data多了一个字母e),二者是完全独立的两个结构体类型,不要混用。
语法区分规则
只要记住一个判断规则即可快速区分:
- 写在结构体
{}大括号内部的变量,才是结构体的成员变量,每个该类型的对象都会自带这些属性 - 写在结构体
{}大括号后面、分号前面的变量,属于当前作用域的普通变量,和结构体本身的成员没有关系
举个对比示例:
struct Sales_data { // 大括号内部:结构体成员变量 int book_id; double revenue; } obj; // 大括号外分号前:当前作用域的Sales_data对象,不是成员
内容的提问来源于stack exchange,提问作者user15634014
相关产品推荐
相关产品推荐

