C++ 在c类型中';变量名不在括号后面吗?
在下面的代码中,我不理解为什么BMP2()在括号中,为什么它里面的字段是这样写的: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
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;