Значение интерфейсов f(T*, int) и интерфейсов f (span<T>) в основных рекомендациях по cpp

Раздел P3 основных руководящих принципов cpp предлагает следующий шаблон в разделе "Обеспечение соблюдения":

f (T *, int) интерфейсы против f(span) интерфейсов

Может кто-нибудь объяснить, что это значит для старого программиста на C, который хочет понять современный C++?

1 ответ

Решение

Раздел P3 посвящен "Экспресс намерению". Следовательно, идея заключается в том, кто выражает намерение более четко.

Рассматривать f(T*, int), Мы должны спросить:

  1. Указатель указывает на один объект или массив?
  2. Целое число представляет размер массива или что-то еще?

Информация не очень хорошо выражена в сигнатуре функции. Он должен быть получен с помощью других средств, например, документации, соглашений об именах и т. Д.

С другой стороны, когда мы видим f(span<T>) имеет четкое и неоспоримое намерение: функция принимает массив (на который ссылается через span<T> объект). Намерение ясно, потому что это единственная цель spanв отличие от указателя, являющегося многоцелевым.

Так, f(span<T>) лучше заявляет о намерении, если намерение состоит в том, чтобы взять массив.

Другие вопросы по тегам