c++ - (C/C++) 结构初始化语法

标签 c++ c syntax struct initialization

当我创建自己的结构时,说:

struct myStruct{
    int data1;
    int data2;
    string data3;
}

我可以像这样初始化 myStruct 类型的实例:

myStruct instance1;

所以我的问题是,为什么我经常看到在结构初始化期间写入“struct”? 也许这是一个不准确的陈述,所以这是我的意思的一个例子:

/*This is a tiny program that checks
  to see if a file exists in
  the current working directory. */

#include <sys/stat.h>
#include <iostream>
using namespace std;

const string FILENAME = data.txt;

int main(){

    struct stat fileStatus; //<-- HERE HERE HERE!
    if (FileExists(FILENAME, fileStatus)){
        cout << "File Does Exist" << endl;
    }else{
        cout << "File Does NOT Exist" << endl;
    }

    return 0;
}

bool FileExists(const string & fileName,struct stat & fileStatus){

    bool fileDoesNotExist = stat (fileName.c_str(), &fileStatus);
    return !fileDoesNotExist;
}

> 第 13 行:结构统计文件状态;

这是出于某种原因用 C 语言完成的事情吗?
带有宏或 typedef 的东西?

我只是不明白为什么会这样。

最佳答案

这是C的东西;没有充分的理由继续用 C++ 来做。1

在 C 中,struct 是类型名的一部分,例如:

struct foo { int x; };

定义了一个名为 struct foo 的类型。在 C++ 中,它定义了一个名为 foo 的类型。在 C 中,您通常可以将这种恼怒隐藏在 typedef 后面:

typedef struct foo { int x; } foo;


1 至少,不是在不可能也被编译为 C 的代码中(例如您问题中的示例)。

关于c++ - (C/C++) 结构初始化语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829368/

相关文章:

c++ - 使用嵌套 lambda 时出现奇怪的编译错误

c++ - CPP 程序不运行

c - 在ansi C中分割字符串

c - 为什么 c 允许 main(),即使它不是 int main() 或 void main()?

Mysql连续3个单引号

c++ - 比 C++ 中的异常处理更好的语言特性?

c++ - 无法编译 rocksdb,找不到依赖项

c - 结构体内部指针的值

c - 在 C 语言中 - 计算 1 的序列

javascript - IIFE 前的分号有什么用?