[英]Why does this code works on one platform but doesn't work on another?
[英]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 ++中的結構類似於類,因此您需要分別訪問數據成員,並且正如有人在使用分配之前所說的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.