为什么这段代码有效,而那段代码不起作用?
Why does THIS code work but THAT one doesn't?
语言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++ 中的结构类似于类,因此您需要单独访问数据成员,正如有人在使用赋值之前所说的那样。
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 修改 VS Code 中的默认C++代码段
- 我是如何在这段代码中出现分段错误的
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 为什么这段代码不起作用,我该如何解决?
- 为什么这段代码给我错误? 有没有自错?
- 有人可以解释一下这段代码如何能够反转字符串
- 可能我知道为什么这段代码没有给出任何输出吗?
- 这段代码的最后一行在做什么?
- 我不知道为什么这段代码会让核心被转储?
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 有人可以向我解释一下这段代码的作用吗?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 为什么这段代码会导致无限循环?
- 为什么代码段会引发浮点异常?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 如何为一段代码启用 -permissive
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 为什么下面的代码段返回指针指向的值而不是指针的地址?
- 谁能告诉我为什么这段代码没有产生正确的输出?