为什么这段代码有效,而那段代码不起作用?

Why does THIS code work but THAT one doesn't?

本文关键字:代码 段代码 不起作用 为什么 有效      更新时间:2023-10-16

语言C++下面是完整的代码:

#include <iostream>
using namespace std;
struct part
{
int model_numb;
int part_numb;
float cost;
};
void main()
{
part part1, part2 = { 2022, 203, 2121.23F };
char dummy;
part1.model_numb = 12345;
part1.part_numb = 203;
part1.cost = 5050.30F;
cout << "******Part1*****" << endl;
cout << "nModel Numb: " << part1.model_numb
    << "nPart Numb: " << part1.part_numb
    << "nCost: " << part1.cost << endl << endl;
cout << "******Part2*****" << endl;
cout << "nModel Numb: " << part2.model_numb
    << "nPart Numb: " << part2.part_numb
    << "nCost: " << part2.cost << endl << endl;
part1 = part2;
cout << " part1 = part2" << endl << endl;
cout << "******Part1*****" << endl;
cout << "nModel Numb: " << part1.model_numb
    << "nPart Numb: " << part1.part_numb
    << "nCost: " << part1.cost << endl << endl;
cout << "******Part2*****" << endl;
cout << "nModel Numb: " << part2.model_numb
    << "nPart Numb: " << part2.part_numb
    << "nCost: " << part2.cost << endl << endl;

cin >> dummy;
}

如果我替换以下行:

part part1, part2 = { 2022, 203, 2121.23F };

使用这些行:

part part1, part2;
part2 = { 2022, 203, 2121.23F };

代码将不起作用。它给了我语法错误(在"{"之前缺少";")(在"}"之前缺少";")和(预期的表达式)在这些行中。为什么???我确定我没有对第二个程序进行任何更改,除了提到的那些。

聚合初始化语法(将初始值设定项括在 {} 中)是一种来自 C 的非常古老的语言特性。这种语法的原始形式专门与初始化上下文相关联。您可以使用它在声明中初始化对象,并且只能在声明中初始化对象。您不能在其他任何地方使用它。所以,从这个角度来看,你所做的改变是一个非常严重的改变。正如您似乎错误地认为的那样,这根本不是小事。

C++11版本的C++语言通过其统一的初始化功能扩展了{}语法的可用性。碰巧在 C++11 中您的第二个代码也是有效的。但它在任何 C++11 之前的编译器中都无效。您使用的编译器未完全实现 C++11,这就是您收到错误的原因。

在第一种情况下,它是 c99 和 c++03 支持的初始化语句。

在第二种情况下,它是对 {..} 列表的已构造对象的赋值。它称为扩展器初始值设定项列表 {},在 c++11 中受支持。

因此,您需要 c++11 编译器才能正常工作。

创建

结构后无法对其进行初始化。这是因为 c++ 中的结构类似于类,因此您需要单独访问数据成员,正如有人在使用赋值之前所说的那样。