Значение интерфейсов f(T*, int) и интерфейсов f (span<T>) в основных рекомендациях по cpp
Раздел P3 основных руководящих принципов cpp предлагает следующий шаблон в разделе "Обеспечение соблюдения":
f (T *, int) интерфейсы против f(span) интерфейсов
Может кто-нибудь объяснить, что это значит для старого программиста на C, который хочет понять современный C++?
1 ответ
Раздел P3 посвящен "Экспресс намерению". Следовательно, идея заключается в том, кто выражает намерение более четко.
Рассматривать f(T*, int)
, Мы должны спросить:
- Указатель указывает на один объект или массив?
- Целое число представляет размер массива или что-то еще?
Информация не очень хорошо выражена в сигнатуре функции. Он должен быть получен с помощью других средств, например, документации, соглашений об именах и т. Д.
С другой стороны, когда мы видим f(span<T>)
имеет четкое и неоспоримое намерение: функция принимает массив (на который ссылается через span<T>
объект). Намерение ясно, потому что это единственная цель span
в отличие от указателя, являющегося многоцелевым.
Так, f(span<T>)
лучше заявляет о намерении, если намерение состоит в том, чтобы взять массив.