Вызов функции в качестве аргумента по умолчанию в порядке? - PullRequest
1 голос
/ 22 сентября 2010

Справочная информация: при работе со временем я хотел передать «сейчас» в качестве аргумента, когда он известен, и спросить систему, если он еще не известен, поэтому я передал его аргументу, который по умолчанию вызывает функцию времени,Похоже, это работает с GCC (4.1.2), как показано в следующем коде (это выглядит немного странно, но примеры со временем, как правило, немного сложнее).

Вопрос: Соответствует ли вызов функции в качестве аргумента по умолчанию стандарту C ++ / переносимым / разумным правилам?
Приветствуются цитаты из стандарта, ссылки и SO-вопросы

#include <iostream>
#include <string>

std::string getString()
{
  std::cout << "Default: " << std::flush;
  char line[100];
  std::cin.getline(line, 100);
  return line;
}

void printString(const std::string& str = getString())
{
  std::cout << str << std::endl;
}

int main()
{
  printString("start");
  printString();
  printString("stop");
}

Ответы [ 2 ]

4 голосов
/ 22 сентября 2010

Язык программирования C ++ (раздел 7.5) говорит:

"Аргумент по умолчанию проверяется типом во время объявления функции и оценивается во время вызова ." (курсив мой)

Так что можно передавать функцию в качестве аргумента по умолчанию.

4 голосов
/ 22 сентября 2010

Да, функции разрешены в качестве аргументов по умолчанию. См. Пример в 8.3.6 / 5 стандарта 2003 года

...