簡體   English   中英

為什么此代碼有效,而那個無效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM