Допустим, вы создавали / выбирали бы сегодня новый язык програмирования. В этом языке есть переменные, структуры данных и функции.
Все как у всех.
Однако, иногда нужны были бы модификаторы. Вопрос такой, какое поведение вы выбрали по умолчанию, а какое с модификатором из следующих категорий?
Константность:
const / mutable
Асинхронность:
sync / async
Виртуальность:
virtual / direct
Передача:
ref / value
Видимость:
public / private / ...
Из моего опыта
по умолчанию должно быть примерно так:
Константность: всё константно, если надо иначе пиши mutable (конверт из константной ссылки с copy-on-write)
Асинхронность: всё асинхронно, хочешь синхронный вызов добавь sync
Виртуальность: всё виртуально, хочешь прямой вызов объяви снаружи/статический
Передача: всё по ссылке, для копии нужно указать value на типе или на переменной.
Видимость: всё публичное, если надо спрятать добавляешь private и ко.