(C/C++)struct initalization语法

Tre*_*key 1 c c++ syntax struct initialization

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

struct myStruct{
    int data1;
    int data2;
    string data3;
}
Run Code Online (Sandbox Code Playgroud)

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

myStruct instance1;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,为什么我经常在结构初始化期间看到"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;
}
Run Code Online (Sandbox Code Playgroud)

> LINE 13:struct stat fileStatus;

这是因某种原因在C中完成的吗?
有宏或typedef的东西?

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

Oli*_*rth 6

这是一件C事; 没有充分的理由继续在C++中这样做.1

在C中,struct是typename的一部分,例如:

struct foo { int x; };
Run Code Online (Sandbox Code Playgroud)

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

typedef struct foo { int x; } foo;
Run Code Online (Sandbox Code Playgroud)


1至少,不是在代码中也不可能编译为C(例如你问题中的例子).