Являются ли следующие распределения данных аналогичными?

Использование:

int a=[10] = {1, 2, 3, 4, 5};
int n = sizeof(a);
printf("%d", n);

Выход:

5

Причина: вычисляет количество элементов, хранящихся в массиве, а не количество свободных пространств, выделенных ему.

1
задан Ben Lakey 19 May 2010 в 04:24
поделиться

2 ответа

Тип Foo может быть либо типом значения, либо ссылочным типом, за исключением, конечно, Objective-C.

Предполагая, что Foo является ссылочным типом, тогда для C # и VB.NET первая строка не будет выделять память для объекта, поскольку первая строка Objective-C фактически выделяет память, так что это различие. В языках .NET распределение и инициализация выполняется в одной строке во второй строке.

В случае, если Foo является типом значения, тогда языки .NET аналогичны друг другу, Objective-C не имеет типов значений (по крайней мере, не в последний раз, когда я работал с ним 15 лет назад).

2
ответ дан 3 September 2019 в 00:28
поделиться

Вы перезаписываете bar как в C #, так и в VB.NET. Ваш код эквивалентен просто:

Foo bar;  // does nothing but declare a handle
bar = new Foo(); // alloc AND init

или просто:

Foo bar=new Foo();

Где Obj-C, очевидно, отделяет выделение от инициализации, все другие C ++ - подобные языки объединяют 2, думая (правильно imo), что вы никогда не захотите частично неинициализировать объекты (конечно, не считая конструкторов).

0
ответ дан 3 September 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: