Почему ключевое слово const является обязательным для определения параметров шаблона? - PullRequest
0 голосов
/ 01 февраля 2012

Я просто хотел знать, почему я должен сделать так, чтобы переменные, которые я передаю шаблонам функций, были const?

пример: -

   #include <iostream>
   using std::cout;
   using std::endl;

   template< typename T>
   void printArray( T *array, int count )
   {
      for ( int i = 0; i < count; i++ )
         cout << array[ i ] << " ";
      cout << endl;
   }

   int main()
   {
     const int ACOUNT = 5; // size of array a
     const int BCOUNT = 7; // size of array b
     const int CCOUNT = 6; // size of array c

     int a[ ACOUNT ] = { 1, 2, 3, 4, 5 };
     double b[ BCOUNT ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
     char c[ CCOUNT ] = "HELLO"; // 6th position for null

     cout << "Array a contains:" << endl;

     // call integer function-template specialization
     printArray( a, ACOUNT );

     cout << "Array b contains:" << endl;

     // call double function-template specialization
     printArray( b, BCOUNT );

     cout << "Array c contains:" << endl;

     // call character function-template specialization
     printArray( c, CCOUNT );
     return 0;
   }

Здесь в основной функции: -Я объявляю переменные

 const int ACOUNT = 5; // size of array a
 const int BCOUNT = 7; // size of array b
 const int CCOUNT = 6; // size of array c

как const.Если я не объявлю их как const, то получу ошибку «Неинициализированный массив».

Может кто-нибудь, пожалуйста, дайте мне знать, если это правило, что параметры, отправляемые в шаблоны функций, должны иметь тип const

1 Ответ

4 голосов
/ 01 февраля 2012

Я просто хотел знать, почему я должен делать переменные, которые я передаю шаблонам функций, должны быть константными?
Нет, вам не нужно, проблема кроется в другом месте.

В C ++ вам не разрешено иметь Массивы переменной длины (VLA) .
Следовательно, когда вы объявляете массив, длина должна быть объявлена ​​какпостоянная времени компиляции.

const  int ACOUNT = 5; // size of array a
const int BCOUNT = 7; // size of array b
const int CCOUNT = 6; // size of array c

int a[ ACOUNT ] = { 1, 2, 3, 4, 5 };
double b[ BCOUNT ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
char c[ CCOUNT ] = "HELLO"; // 6th position for null

В приведенном выше примере, без const, ваши массивы будут объявлены как VLA, а это не разрешено в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...