C++ 在c类型中';变量名不在括号后面吗?

C++ 在c类型中';变量名不在括号后面吗?,c++,typedef,C++,Typedef,在下面的代码中,我不理解为什么BMP2()在括号中,为什么它里面的字段是这样写的: typedef struct BMP2 { unsigned long biSize; unsigned long biWidth; unsigned long biHeight; unsigned short biPlanes; unsigned short biBitCount; unsigned long biCompression; unsigned long biSizeIm

在下面的代码中,我不理解为什么BMP2()在括号中,为什么它里面的字段是这样写的:

typedef struct BMP2
{
  unsigned long biSize;
  unsigned long biWidth;
  unsigned long biHeight;
  unsigned short biPlanes;
  unsigned short biBitCount;
  unsigned long biCompression;
  unsigned long biSizeImage;
  unsigned long biXPelsPerMeter;
  unsigned long biYPelsPerMeter;
  unsigned long biClrUsed;
  unsigned long biClrImportant;
  BMP2()
  {
    biWidth
    = biHeight
    = biCompression
    = biSizeImage
    = biXPelsPerMeter
    = biYPelsPerMeter
    = biClrUsed
    = biClrImportant = 0;
    biSize = sizeof(BMP2);
    biPlanes = biBitCount
    = 0;
  }
};
BMP2()
是结构的构造函数

这个

是一种替代方法:

biWidth = 0;
biHeight = 0;
biCompression = 0;
biSizeImage = 0;
biXPelsPerMeter = 0;
biYPelsPerMeter = 0;
biClrUsed = 0;
biClrImportant = 0;
BMP()
-结构的构造函数
BMP
。在C++中允许初始化变量与代码一样。例如:

int var1, var2, var3;
var1 = var2 = var3 = 4;
std::cout << "var1: " << var1 << std::endl;
std::cout << "var2: " << var2 << std::endl;
std::cout << "var3: " << var3 << std::endl;

例如,C++初始化可以链接到分号

a = b = c = d = e = f = 0;
这里所有内容都将初始化为
0

这也可以用多行书写

a 
= b
= c
= d
= f
= 0;
这就是你的情况


> bMP2](/c++),它是C++的一个特殊功能,称为“构造函数”,每次例示类时都会自动调用。< /p> 你的声明看起来像是<代码> TyPufF声明,没有声明符。(现在还不清楚您所说的“括号后的变量名”是什么。)

C++17明确禁止没有声明符的
typedef
声明,这意味着您的代码格式不正确

7.1.3类型定义说明符
1[…]如果在没有声明符的声明中出现
typedef
说明符,则程序的格式不正确

以前版本的C++标准没有包括这样的措辞(至少在这样简单的形式)。p>


由于C++中的类(和枚举)声明可以省略声明符(并且,可能,因为在C代码中TyBuff TyPulfF。在这种情况下,您拥有的是类

BMP2
的普通类声明

BMP2()
是一个构造函数。
typedef
关键字在这里是多余的,我认为它不应该编译(结尾缺少一个名称)…不,
BMP2()
不在括号内。。。它只是
结构中的一个函数。在C++中,它是一个构造函数。@ FurBruUm,叫我老式,但是在我的C中,结构里面没有函数。显然没有有效的C代码-标签被删除。TyPulf在C++中是多余的, BMP2<代码>是一个类型名称。它是C++:也许你想告诉原始代码的作者大约1。初始值设定项列表和2。关于初始化的类成员。
a = b = c = d = e = f = 0;
a 
= b
= c
= d
= f
= 0;