Несколько выходных значений функции должны быть возвращены как структура или кортеж
Несколько выходных значений функции должны быть возвращены как структура или кортеж.
В функции C++ return оператор может возвращать только значение, сохраненное в одной переменной. Однако значения, хранящиеся в любом числе дополнительных переменных в области действия вызывающего абонента, могут быть изменены вызываемым абонентом, если передать эти значения по ссылке, а затем изменить их в теле вызываемого абонента. Например, рассмотрим функцию foo:
int foo(int x, int& y)
{
int z;
y = x*x;
z = x*x*x;
return z;
}Функция foo фактически возвращает два целочисленных значения: квадрат входного параметра x (возвращаемый ссылкой) и куб входного параметра x (возвращаемый копией с помощью return заявление). Одновременное использование обеих стратегий для возврата нескольких значений приводит к сложному функциональному интерфейсу и может сделать код менее читаемым и ремонтопригодным. Вместо этого следует сохранить все возвращаемые значения в одной структуре или кортеже и вернуть их с помощью return оператор обеспечивает более простой и унифицированный интерфейс.
A return оператор со структурой или кортежем может потребовать дорогостоящего копирования из одной ячейки памяти в другую. Большинство компиляторов поддерживают оптимизацию возвращаемых значений и могут исключить эту дорогостоящую копию, что приводит к появлению исполняемого кода с небольшими затратами или отсутствием затрат, связанных с такими возвращениями.
Чтобы помочь решить, использовать ли структуру или кортеж для возврата нескольких значений, рассмотрите:
Если возвращаемый тип представляет абстракцию, предпочтительно использовать структуру, так как можно задать пользовательское имя для каждого компонента абстрактного типа данных.
Кортежи легче работать, потому что возвращенный кортеж может быть удобно обработан с помощью std::tie на месте вызова. std::tie помещает элементы кортежа непосредственно в существующие локальные переменные вызывающего абонента.
Примечание
Это правило также применяется к std::pair, который является особым видом кортежа, который имеет ровно два элемента.
Средство проверки помечает объявление функции, которое удовлетворяет одному из следующих двух условий:
Функция имеет недействительный возвращаемый тип и, по крайней мере, один неконституционный ссылочный параметр
Функция имеет более одного неконституционного ссылочного параметра
Примечания и ограничения по использованию:
Средство проверки помечает чистые виртуальные функции, нарушающие это правило. Эти функции помечаются потому, что для того, чтобы любая реализация чистой виртуальной функции соответствовала этому правилу, интерфейс самой чистой виртуальной функции должен подчиняться этому правилу.
Средство проверки не помечает операторы, нарушающие это правило.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Деклараторы |
| Категория: Консультации, Автоматизированные |