【问题标题】:Is calling a function as default argument okay?调用函数作为默认参数好吗?
【发布时间】:2010-09-22 13:17:51
【问题描述】:

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

【问题讨论】:

    标签: c++ standards-compliance


    【解决方案1】:

    是的,函数被允许作为默认参数。参见 2003 标准 8.3.6/5 中的示例

    【讨论】:

    • 感谢您解决这个问题。如果同事问我到底在做什么,我会指出这里。
    【解决方案2】:

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

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

    所以传递一个函数作为默认参数是可以的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-03
      • 2012-02-03
      • 2010-09-17
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 2010-10-03
      相关资源
      最近更新 更多