You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:54:03