Не можем ли мы сделать что-нибудь подобное?C++ 1z (?) Размер массива времени выполнения как возвращаемое значение
auto f(int n, char *arr[]) -> decltype(char *[n]) /* doesn't work */ {
char *tmp[n]; // RSA, the size depends on argc
for (int i = 0; i < n; ++i) tmp[i] = arr[i];
return tmp;
}
int main(int argc, char *argv[]) {
auto arr = f(argc, argv);
for (auto e : arr)
cout << e << endl;
}
Я люблю семантику значений (до тех пор, как мой компилятор может сделать правильную подстановку), особенно, когда я реорганизовать большую функцию в набор небольших утилит.
Редактировать: oops, он не попал в C++ 14 ... (Изменено название с "C++ 14" на "C++ 1z (?)".) Как насчет "Расширения массива TS "? Поддерживает ли это что-то подобное?
C++ 14 не га ve временные размерные массивы. Существуют реализации 'string_view' и' array_view', которые вы могли бы использовать для переноса параметров, но они также не являются стандартными. – chris
Встроенные массивы были заброшены новым языком разработки на C++, потому что они сосут. Вы должны либо использовать 'std :: array', либо' std :: vector' или подобные, чтобы воспользоваться такими замечательными функциями, как возврат массива. –