一、C语言中的typedef struct A {}A,C++中的struct A {};以及C++中的struct A {}A, B.
(仅为了记录自己的学习,如有错误,请指正,谢谢)
(1)在C语言中,结构体定义如下
// 在c语言中
typedef struct A{}B;
用结构体定义变量时,可以用以下两种方式
//第一种形式
struct A variance
//第二种形式
B variance
如果定义结构体类型时少了“A”,即:
typedef struct {}B;
定义变量时,只能用第二种形式,而不能用第一种方式
PS:若初始定义时,定义了多个结构体类型,如:
typedef struct A{}B, C, D;
则B, C, D 等价,都是结构体类型,都可以定义结构体变量(这里不太懂,这样的话,不重复吗?)
(2)在C++,结构体定义如下
struct A{};
用结构体定义变量时,可以用以下方式
A variance
PS:若前面加了关键字“typedef”,则可以直接定义结构体变量,比如:
typedef struct A{}B;
注意:在这里,B是一个结构体变量(variance),是一个对象,而不是结构体类型,相等价于以下写法:
typedef struct A{};
A B;
归纳一个记忆口诀:C++是对象,而C#是结构。
参考链接
https://www.cnblogs.com/yaowen/p/4797105.html
https://blog.youkuaiyun.com/lynch0571/article/details/39275913
二、C++ struct使用花括号值初始化 不包含 static变量和函数体.
#include <iostream>
#include <string>
using namespace std;
struct S
{
string description;
static int number;
int a;
int getNumber();
};
int S::number = -1; // 1.静态变量在构造函数之前初始化
int S::getNumber()
{
return number;
}
int main()
{
S s = {"myStruct", 2}; // 2.strtuct初始化时不包含static变量和函数体
cout << "s.a:" << s.a << endl;
return 0;
}