Значение по умолчанию как Global const против возвращаемого значения функции - PullRequest
1 голос
/ 22 января 2020

В книге «Принципы и практика программирования с использованием C ++» Бьярна Страуструпа в разделе 8.6.2 Глобальная инициализация рекомендуется определять значения по умолчанию (например, для даты в календаре) следующим образом:

const Date& default_date()
{
  static const Date dd(1970,1,1);
  return dd;
}

Как этот метод сравнивается с простой глобальной константой следующим образом?

static const Date dd(1970,1,1);

Ответы [ 2 ]

3 голосов
/ 22 января 2020

Функция default_date объявлена ​​с внешней связью , что означает, что ее можно использовать из любой единицы перевода с подходящим объявлением.

Глобальная переменная имеют внутреннюю связь и поэтому могут использоваться только в той единице перевода, в которой она определена.

1 голос
/ 22 января 2020

Взгляните сюда:

https://godbolt.org/z/Y6Dhbz

Чисто победителями являются чисто POV:

Объявление как статус c const в заголовочном файле

static const Date dd(1970,1,1);

Использование constexpr

constexpr Date dd(1970,1,1);

Возвращение значения по умолчанию из встроенного метода.

inline Date default_date()
{
  return Date(1970,1,1);
}

Как этот метод отличается от простого наличия глобальной константы следующим образом?

IF метод компилируется в одной и той же компиляции единица, то в принципе разницы нет. Однако, если default_date - extern, то вы будете подвергаться нескольким дополнительным нагрузкам. Лично я бы рекомендовал использовать constexpr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...