2013-09-24 3 views
2

Я пытаюсь определить массив стека c-style, размер которого взят из массива const и известен во время компиляции.C++ Объявить массив, размер которого из массива const

const int size[2]={100, 100}; 
int ar[size[0]]; //error: expression must have a constant value 

Не удается. Как это можно исправить?

+2

Какой компилятор? – P0W

+1

Работает с g ++ 4.4. Он также работает на [ideone] (http://ideone.com/nfyLOs) – cpp

+0

Visual Studio 2010 –

ответ

3

"массив, размер которого берется из массива сопзЬ и известен в время компиляции"

С C++ 11 вы можете:

constexpr int size[2]={100, 100}; // size[0] is Compile-time constant

Использование -std=c++11 или -std=c++0x для компиляции

+0

Он работает даже в C++ 98 – cpp

+3

@cpp: Нет, это не так. Он работает с гибридом C++ 98 и C99, который поддерживает массивы переменной длины, но в стандартном C++ вам нужно 'constexpr' использовать элементы массива в качестве констант времени компиляции, и это было недоступно до 2011 года. –

2

Некоторые варианты (с разной степенью популярности):

  1. Использование constexpr (не поддерживается в Visual Studio)
  2. Используйте векторные
  3. Использование динамического распределения
  4. Используйте const int (C99 или более поздней версии или C++)
  5. Используйте enum
  6. Использование MACRO для определения размера (поскольку он известен во время компиляции)
+0

1. constexpr может быть лучшим решением, но оно не поддерживается в Visual Studio 2010 2.3. Используйте динамическое распределение Vector/Use - это не то, что мне нужно 4. Используйте MACRO/define - не лучше, чем просто использовать consts –

+0

Поскольку вы используете C++, вы можете это сделать, это также возможно, если вы используете современный C-компилятор (C99 или новее - это технически будет массив переменной длины), но не будет работать на MSVC, если вы скомпилируете код как код C. – msam

1

Размеры массива C++ должны быть постоянными выражениями, а не только постоянными данными. Данные массива, даже если const, не являются постоянным выражением.

array size and const

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