调用函数作为默认参数好吗?

时间:2010-09-22 13:17:52

标签: c++ standards-compliance

背景:当处理时间时,我想在知道时将“now”作为参数传递 并询问系统是否还不知道,所以我把它传递给一个默认调用时间函数的参数。 这似乎适用于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 个答案:

答案 0 :(得分:4)

是的,允许函数作为默认参数。请参阅2003标准

的8.3.6 / 5中的示例

答案 1 :(得分:4)

The C++ Programming Language(第7.5节)说:

“默认参数在函数声明时检查类型,在调用时评估。” (斜体矿)

因此可以将函数作为默认参数传递。