在结构类型之后定义结构变量

Defining structure variable after structure type

本文关键字:结构 变量 定义 类型 之后      更新时间:2023-10-16
#include <iostream>
struct people 
{
    int id;
} person; // that part
int main()
{
    person = {3};   
    std::cout << person.id;
    return 0;
}

我想问你关于初始化结构的问题(好吧,不是初始化...正在创建结构类型...我真的不知道你怎么称呼这个(。一旦我看到了结构之后的一些关键字,比如这里的"人"。所有这些都没有任何类型定义。

我做了一些研究,发现它用于直接在结构之后定义一个变量。

但是,我上面发布的代码无法编译 - 它说语法错误,缺少分号和废话,这意味着表达式无效。

这是用来做什么的,如何使用它?

你不能在普通赋值中使用结构初始化语法,必须在声明变量时完成:

struct people 
{
    int id;
} person = { 3 };

如果您有兼容 C++11 的编译器,则可以稍后使用统一的初始化语法进行复制

person = people { 3 };
struct people 
{
    int id;
} person; // that part

Person 是类型 people 的全局对象。

person = {3};

在 C++03 中不正确,在 C++11 中正确,因为{3}将被视为people{3}

一旦我看到了结构之后的一些关键字,比如这里的"人"。

这不是一个关键词,而是一个名字。如果您愿意,可以在定义类类型的同一语句中声明类类型的变量。它等效于两个单独的声明:

struct people 
{
    int id;
};
people person;

但是,我上面发布的代码无法编译

听起来您的编译器不支持 C++11(特别是来自大括号列表的赋值(,或者您正在禁用它进行编译。

如果您不能使用 C++11,则必须单独分配每个成员:

// person = {3};   // C++11 only
person.id = 3;

或者声明并初始化一个本地对象并从中分配:

people temp = {3};
person = temp;

或在其声明中初始化它,而不是推迟到main

struct people
{
    int id;
} person = {3};