С++, инициализация массива пустым списком
От: Беженарь Владимир Сергеевич Казахстан  
Дата: 09.07.06 13:12
Оценка:
int v[10] = {};


Этот код соответствует стандартам C++ (или C) ? gcc и comeau не ругаются, микрософтовские компиляторы ругаются. На стандарт смотрел, конкретно про этот случай ничего не увидел.
Re: С++, инициализация массива пустым списком
От: shank  
Дата: 09.07.06 13:36
Оценка: 2 (1)
Здравствуйте, Беженарь Владимир Сергеевич, Вы писали:

БВС>
int v[10] = {};


БВС>Этот код соответствует стандартам C++ (или C) ? gcc и comeau не ругаются, микрософтовские компиляторы ругаются. На стандарт смотрел, конкретно про этот случай ничего не увидел.


8.5.1/1
An aggregate is an array or a class (clause 9) with no user-declared constructors...


8.5.1/8
An empty initializer-list can be used to initialize any aggregate. If the aggregate is not an
empty class, then each member of the aggregate shall be initialized with a value of the form T() (5.2.3),
where T represents the type of the uninitialized member.

Re[2]: С++, инициализация массива пустым списком
От: Владимир Беженарь Казахстан  
Дата: 09.07.06 13:43
Оценка:
Здравствуйте, shank, Вы писали:

БВС>>
int v[10] = {};


БВС>>Этот код соответствует стандартам C++ (или C) ? gcc и comeau не ругаются, микрософтовские компиляторы ругаются. На стандарт смотрел, конкретно про этот случай ничего не увидел.


S>

S>8.5.1/1
S>An aggregate is an array or a class (clause 9) with no user-declared constructors...


S>

S>8.5.1/8
S>An empty initializer-list can be used to initialize any aggregate. If the aggregate is not an
S>empty class, then each member of the aggregate shall be initialized with a value of the form T() (5.2.3),
S>where T represents the type of the uninitialized member.


Спасибо.
Re: С++, инициализация массива пустым списком
От: Bell Россия  
Дата: 10.07.06 07:31
Оценка:
Здравствуйте, Беженарь Владимир Сергеевич, Вы писали:

БВС>
int v[10] = {};


БВС>Этот код соответствует стандартам C++ (или C) ? gcc и comeau не ругаются, микрософтовские компиляторы ругаются. На стандарт смотрел, конкретно про этот случай ничего не увидел.


здесь
Автор: Pushkin
Дата: 17.12.02
Любите книгу — источник знаний (с) М.Горький
Re: С++, инициализация массива пустым списком
От: Testus  
Дата: 10.07.06 18:48
Оценка:
Здравствуйте, Беженарь Владимир Сергеевич, Вы писали:

БВС>
int v[10] = {};


БВС>Этот код соответствует стандартам C++ (или C) ? gcc и comeau не ругаются, микрософтовские компиляторы ругаются. На стандарт смотрел, конкретно про этот случай ничего не увидел.



int v[10] = {};


int v[10];
....
ZeroMemory(v, 10 * sizeof(int));
Glück auf
Re[2]: С++, инициализация массива пустым списком
От: korzhik Россия  
Дата: 10.07.06 19:00
Оценка:
Здравствуйте, Testus, Вы писали:

T>
int v[10];
T>....
T>ZeroMemory(v, 10 * sizeof(int));
T>


А вот это вы зря, мало того что это microsoft-specific, и вообще не надо его использовать: http://blogs.msdn.com/oldnewthing/archive/2005/06/28/433341.aspx
Re[3]: С++, инициализация массива пустым списком
От: Testus  
Дата: 10.07.06 19:09
Оценка: +1
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, Testus, Вы писали:


T>>
int v[10];
T>>....
T>>ZeroMemory(v, 10 * sizeof(int));
T>>


K>А вот это вы зря, мало того что это microsoft-specific, и вообще не надо его использовать: http://blogs.msdn.com/oldnewthing/archive/2005/06/28/433341.aspx


Можно реализовать аналог на чистом С так, что бы было не только microsoft-specific.
Glück auf
Re: С++, инициализация массива пустым списком
От: Alex Alexandrov США  
Дата: 11.07.06 18:52
Оценка:
Здравствуйте, Беженарь Владимир Сергеевич, Вы писали:

БВС>
int v[10] = {};


БВС>Этот код соответствует стандартам C++ (или C) ? gcc и comeau не ругаются, микрософтовские компиляторы ругаются. На стандарт смотрел, конкретно про этот случай ничего не увидел.


int v[10] = { 0 };
It's kind of fun to do the impossible (Walt Disney)
Re[4]: С++, инициализация массива пустым списком
От: Roman Odaisky Украина  
Дата: 11.07.06 19:08
Оценка:
Здравствуйте, Testus, Вы писали:

K>>А вот это вы зря, мало того что это microsoft-specific, и вообще не надо его использовать: http://blogs.msdn.com/oldnewthing/archive/2005/06/28/433341.aspx


T>Можно реализовать аналог на чистом С так, что бы было не только microsoft-specific.


А что, на чистом C int A[N] = { } не будет работать? Или int A[N] = { 0 }, чтобы старые MSVC не смущались.
До последнего не верил в пирамиду Лебедева.
Re[4]: С++, инициализация массива пустым списком
От: Дмитрий Полищук  
Дата: 12.07.06 07:27
Оценка: +1
Здравствуйте, Testus, Вы писали:

T>Можно реализовать аналог на чистом С так, что бы было не только microsoft-specific.


Зачем?! Уже все готово: в memory.h лежит memset(void*,int,size_t).
Вообще, ZeroMemory это заглушка для RtlZeroMemory, которая определна вот так:

#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
Re[5]: С++, инициализация массива пустым списком
От: Testus  
Дата: 12.07.06 07:43
Оценка: :)
Здравствуйте, Roman Odaisky, Вы писали:

RO>А что, на чистом C int A[N] = { } не будет работать?

Нет не будет эт не ANSI C/С++.
Glück auf
Re[5]: С++, инициализация массива пустым списком
От: Testus  
Дата: 12.07.06 07:44
Оценка:
Здравствуйте, Дмитрий Полищук, Вы писали:

ДП>Здравствуйте, Testus, Вы писали:


T>>Можно реализовать аналог на чистом С так, что бы было не только microsoft-specific.


ДП>Зачем?! Уже все готово: в memory.h лежит memset(void*,int,size_t).

ДП>Вообще, ZeroMemory это заглушка для RtlZeroMemory, которая определна вот так:

ДП>
ДП>#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
ДП>


ну я memset и имел ввиду только не знал что в memory.h уже готов девайн
Glück auf
Re[5]: С++, инициализация массива пустым списком
От: MuTPu4  
Дата: 12.07.06 12:21
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>А что, на чистом C int A[N] = { } не будет работать? Или int A[N] = { 0 }, чтобы старые MSVC не смущались.

Нет, синтаксис ISO C 90/99 не допускает такой конструкции (99:6.7.8/1):
initializer:
    assignment-expression
    { initializer-list }
    { initializer-list ,}
    
initializer-list:
    designationopt initializer
    initializer-list , designationopt initializer
    
...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.