В чем разница между a = 5, a (5), a {5} и a [5] в C ++? - PullRequest
1 голос
/ 16 января 2020

В чем разница между операторами a = 5, a(5), a{5} и a[5] в C ++?

Иногда я вижу, что они используются для чего-то вроде присваивания значения объекту в программах на C ++. В чем разница между ними?

1 Ответ

4 голосов
/ 16 января 2020

Существует основное различие между всеми этими операторами в C ++ в контексте инициализации (которая выполняется в момент объявления объекта) и присваивания; последнее утверждение a[5] также является совершенно другим по сравнению с другими.


Предпосылка: если a является объектом определенного типа данных, например int, мы можем присвоить соответствующее значение (в соответствии с типом данных, объявленным с помощью) до a. Примечание: значение может быть оценено с помощью допустимого выражения, например a = 2 + 3; ведет себя так же, как a = 5;.


  1. 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.

...