LINUX.ORG.RU

[C++] почему?

 


0

0
void f(const int[3]);

...

f({1, 2, 3});

почему так нельзя? при том, что вот так:

const int a[3] = {1, 2, 3};

f(a);

вполне себе законно. {} - это, вроде бы, конструктор для const T[]; конструкторы в вызове функции использовать вполне себе можно. основание для такого особого отношения есть вообще?

это всё при том, что:

void g(const char[3]);

...

g("123");

замечательно работает. C-style строка в C++ - она, в общем-то, массив символов - два исключения из общих языковых правил в одном выражении

ну и то, что и в f и в g можно с лёгкостью передавать массивы большего размера, чем указано в сигнатуре, тоже как-то нехорошо. приведение T[] к T* это, конечно, не так уж и плохо - но толку тогда от такой сигнатуры, спрашивается, если компилятор (с -Wall -pedantic) даже предупреждения не выдаёт?

★★★★★
Ответ на: комментарий от alex4

да, и ещё пусть мне кто-нибудь расскажет, почему вот так тоже нельзя:

const int a[2][2] = {{1, 2}, {3, 4}};

при том, что вот так можно:

const int a[2][3] = {{0}};
jtootf ★★★★★
() автор топика
Ответ на: комментарий от jtootf

А что он пишет, если попытаться скомпилировать этот пример?

alex4
()
Ответ на: комментарий от alex4

>все нормально работает

таки работает. ладно, этот вопрос снимается :)

jtootf ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.