Существует основное различие между всеми этими операторами в C ++ в контексте инициализации (которая выполняется в момент объявления объекта) и присваивания; последнее утверждение a[5]
также является совершенно другим по сравнению с другими.
Предпосылка: если a
является объектом определенного типа данных, например int
, мы можем присвоить соответствующее значение (в соответствии с типом данных, объявленным с помощью) до a
. Примечание: значение может быть оценено с помощью допустимого выражения, например a = 2 + 3;
ведет себя так же, как a = 5;
.
a = 5;
Это является обычной формой назначения, используемой в программах на C ++. Его можно использовать либо для инициализации, либо для более позднего присвоения (после объявления a
) в соответствующей области. Если a
правильно объявлено для типа int
, этот оператор присваивает целочисленное значение 5
переменной int
, равной a
.
Может использоваться непосредственно объявлением:
int a = 5;
первое присваивание (когда a
не инициализируется при его объявлении):
int a;
// some code may exist between.
a = 5;
Или присваивание где-либо еще в соответствующей области после первого присваивания или инициализации в объявлении (зависит от класса хранения):
int a; // declaration of `a`.
// some code may exist between.
a = 5; // first assignment of `a` with the value of `5`.
// some code may exist between.
a = 7; // assignment of the value of `7` to `a`.
a(5);
Этот оператор инициализирует переменную int
a
значением 5
. Он может использоваться только при явной инициализации в момент объявления:
int a(5);
В противном случае компилятор с большой вероятностью выдаст ошибку, потому что он "думает", что a
будет функцией.
Технически, a(5)
может быть функцией, которая в общем случае принимает значение 5
в качестве аргумента, но это контекст объявления объекта int
что здесь меняет.
a{5};
То же, что и 2. Он инициализирует a
значением 5
. Он может использоваться только при инициализации в момент объявления:
int a{5};
В противном случае компилятор выдаст ошибку.
Примечание: Кому инициализировать значение, например int a{5};
или int a(5)
, только для C ++. Таким способом невозможно инициализировать объект в C.
a[5];
Этим оператором мы явно не инициализируем и не присваиваем значение 5
переменной a
. Вместо этого мы определяем массив, кластер объектов, состоящий из 5
объектов, который представлен в виде своей собственной сущности идентификатором a
:
int a[5]; // declaration of `a` - `a` is an array of 5 int objects.
Итак, у нас нет здесь ни один объект, ни присвоение ему какого-либо значения.
Кроме того, мы должны различать guish между объявлением массива с:
int a[5];
и последующим доступом к определенный int
объект массива a
, как в предыдущем примере:
a[4] = 12;
В этом случае a[4]
представляет 5
-й объект внутри массива и значение 12
назначен этому пятому объекту массива.
Число в квадратных скобках, здесь 4
, называется индексным номером. Обратите внимание, что номера индексов последовательно начинаются с 0
. Таким образом, a[0]
представляет первый объект в массиве, a[1]
- второй и т. Д. Вы не можете использовать a[5]
таким образом, если вы объявили a
с int a[5];
, потому что в этом случае он представлял бы шестой объект, который не выделяется в памяти для a
.