【问题标题】:C++ template with default parameters具有默认参数的 C++ 模板
【发布时间】:2012-05-17 14:02:58
【问题描述】:

我尝试在我的模板中使用默认参数,像这样

#include <iostream>

using namespace std;

template <typename S, typename T=int> 
S myadd(T a, T b)
{
    S tmp = a + b;
    return tmp;
}

int main()
{
    int a = 1, b = 2;
    float i = 5.1, j = 5.2;

    cout << myadd<int, int>(i, j);
    cout << myadd<float>(a, b);

    return 0;
}

然后是 g++ myadd.cpp

显示错误:

没有 -std=c++0x 或 -std=gnu++0x 的函数模板不能使用默认模板参数

为什么会这样?

【问题讨论】:

  • 该错误消息中有什么你不明白的地方?你是怎么编译的?
  • 你不知道为什么?原因是“没有 -std=c++0x 或 -std=gnu++0x 的函数模板不能使用默认模板参数”。
  • 只是一个疯狂的猜测,但你是用 -std=c++0x 还是 -std=gnu++0x 编译?
  • 在这种情况下为什么要使用默认 T? T可以从参数的类型中扣除。
  • @LuchianGrigore 我只是在终端中使用 g++ 和 g++ myadd.cpp。

标签: c++ templates


【解决方案1】:

我从 Stack Overflow 问题中提取了这个答案Default template arguments for function templates

引用 C++ 模板:完整指南(第 207 页):

当模板最初添加到 C++ 语言中时,显式 函数模板参数不是有效的构造。功能 模板参数总是必须可以从调用中推导出来 表达。结果,似乎没有令人信服的理由 允许默认函数模板参数,因为默认值会 总是被推导出的值覆盖。

阅读the Stack Overflow question 以了解更多信息。注意:函数模板 C++ 中的默认参数是 gnu++0x 中的一个新特性。

【讨论】:

    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2011-08-27
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多