2012-02-07 3 views
1

Предположим, у меня есть класс с дорогим конструктором, и, скажем, мне не нужно создавать конструктор, потому что он «прост». Внутри класса я хочу поставить typedef. Все вместе, это выглядит следующим образом:Typedefs внутри класса

class Expensive { 
public: 
    typedef double data_type; 
    data_type data[100000][100000]; 
}; 

Теперь в моем вызывающем коде, если я:

Expensive::data_type singleValue; 

, что собирается создать временный экземпляр Expensive и выделить все это пространство для данных просто чтобы получить доступ к typedef?

+0

Удачи, выделяя это на стеке. Кстати, почему бы вам не написать данные data_type [100000] [100000]; '? –

+1

Это был надуманный пример, чтобы подчеркнуть вопрос; если бы я использовал компилятор Intel и действительно хотел, чтобы это сработало, есть флаг, чтобы поместить все массивы в кучу в любом случае. Или 'ulimit' мой стек неограниченно. – tpg2114

+0

Хорошо, но это немного глупый пример, так как (а) это плохой код и (б) он не будет работать в большинстве конфигураций –

ответ

3

Проще говоря: Нет. Операция не имеет никакого эффекта времени исполнения. Даже просто объявление двойника не гарантирует какого-либо эффекта во время выполнения, поскольку вы его не используете;)

0

No; вы получаете доступ к тому, что является фактически статическим членом класса. Никакой экземпляр не создается, и, следовательно, нет огромного огромного массива.

Смежные вопросы