Мой компилятор (C++Builder6) синтаксически разрешает инициализацию элемента массива (по крайней мере, нулем), но на самом деле он этого не делает. Таким образом, утверждение в приведенном ниже примере терпит неудачу в зависимости от контекста.
#include <assert.h>
struct TT {
char b[8];
TT(): b() {}
};
void testIt() {
TT t;
assert(t.b[7] == 0);
}
Изменение компилятора на данный момент не вариант. Мой вопрос: каков будет лучший способ «исправить» этот недостаток в отношении будущей переносимости и соответствия стандартам?
Изменить: Как оказалось, мой первый пример был слишком коротким. Он упустил момент, что уровень заполнения массива настолько важен, что его нужно хранить очень близко к массиву, то есть: в том же классе.
Даже если исходная проблема остается, моя реальная проблема обычно такова:
struct TT2 {
int size;
char data[8];
// ... some more elements
TT2(): size(0), data() {}
// ... some more methods
};
boost::value_initialized
- person   schedule 11.11.2013boost::value_initialized
было бы хорошим обычным ответом. Конечно, в исходниках он несколько тяжеловат, но поскольку работа ограничивается объявлением, мне кажется, что пока это лучший вариант. - person Wolf   schedule 11.11.2013: b()
, жалуясь на вызов функции «b» без прототипа. - person   schedule 12.11.2013bcc32 --version
говоритBorland C++ 5.6.4 für Win32 Copyright (c) 1993, 2002 Borland
при моей установке. - person Wolf   schedule 12.11.2013