Почему в операторах над valarray не определены операции с valarray&& ?
В результате каждая оператор сложения, взывает дополнительную аллокацию/освобождение памяти, хота можно было бы обойтись
одной:
std::valarray<double> a, b, c;
...
return a+b/c;
Причем, код легко переписыватся на операторы += *= /= ... но при этом, становится нечитаемым.
C>Почему в операторах над valarray не определены операции с valarray&& ?
Джосаттис писал, что люди, замутившие эту библиотеку, давно покинули эту разработку.
И она остается неизменной с самого первого стандарта.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, andrey.desman, Вы писали:
AD>Здравствуйте, Chorkov, Вы писали:
C>>Почему в операторах над valarray не определены операции с valarray&& ?
AD>Они на expression templates написаны, так что лишних аллокаций там и нет. AD>*(как минимум в gcc и clang).
AD>Конечно, даже их с помощью && можно еще соптимизировать, но это того не стоит вроде как.
Здравствуйте, Chorkov, Вы писали:
C>Или я просто не умею его готовить?
Не, просто эта поделка-недоделка такая и давно должна быть выкинута из STL.
Для работы с матричной арифметикой есть качественные либы eigen и armadillo (они умеют юзать BLAS, LAPACK в разных из инкарнациях).
Здравствуйте, Chorkov, Вы писали:
C>Только в стандарте, тип возвращаемого значения указан std::valarray<T>
Всё же не совсем так. Можно возвращать что угодно, если возвращаемый тип по поведению похож на valarray. На ресурсах по твоим же ссылкам это текстом написано
C>https://eel.is/c++draft/valarray.binary
Any function returning a valarray<T> is permitted to return an object of another type, provided all the const member functions of valarray<T> are also applicable to this type.