У меня есть функция, которая имеет конфигурационную структуру в качестве аргумента
struct Config
{
Config(); //<-- default constructor
// some configuration constants
};
int computeSomethingFrom(Something arg, const Config& config = Config());
Определение Config()
и computeSomethingFrom(...)
находятся в одном исходном файле.
MyПредполагается, что каждый вызов функции будет вынужден создавать Config
, поскольку нет способа узнать, зависит ли конструктор по умолчанию от чего-то еще в среде. Это может дорого обойтись, если структура конфигурации становится большой или функция вызывается много раз.
Тем не менее, я бы предпочел не создавать другую константу, если смогу. И это возможно , учитывая, что конструктор по умолчанию и функция определены в одном и том же исходном файле, и компилятор может сделать вывод, что Config()
всегда возвращает одно и то же.
Так что естьлюбой способ избежать выполнения чего-то вроде
inline Config DEFAULT_CONFIG = Config();
и последующего объявления функции как
int computeSomethingFrom(Something arg, const Config& config = DEFAULT_CONFIG);
?