省略 C++ 模板参数列表时的差异

2023-12-01

什么时候可以省略 C++ 模板参数列表?例如,在 Visual Studio 2010 中,这段代码可以正常编译:

template<class T>
Vec2<T> Vec2<T>::operator+ (const Vec2 &v) const
{
    return Vec2(x + v.x, y + v.y);
}

如果您内联代码,它实际上会在没有任何参数列表的情况下进行编译。但这真的和下面的版本一样吗?

template<class T>
Vec2<T> Vec2<T>::operator+ (const Vec2<T> &v) const
{
    return Vec2<T>(x + v.x, y + v.y);
}

在类中,您可以省略类类型的参数:

template<typename K>
struct A {
   A<K> foo1; // legal
   A foo2; // also legal and identical to A<K> foo
   A bar(A x) {...} // same as A<K> bar(A<K> x) {...}
};

在类范围之外,您需要模板参数:

// legal
template<typename K>
A<K> foo(A<K> x) { return A<K>(); }

// illegal!
template<typename K>
A foo(A x) { return A(); }

如果在类外部声明成员函数,您需要返回类型和类的模板列表:

// legal
template<typename K>
A<K> A<K>::bar(A<K> x) { return A<K>(x); }

// legal
template<typename K>
A<K> A<K>::bar(A x) { return A(x); }

// illegal!
template<typename K>
A A::bar(A<K> x) { return A<K>(x); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

省略 C++ 模板参数列表时的差异 的相关文章

随机推荐

  • Wildfly 在 EAR 之间共享会话?

    我在 2 个独立的 EAR 中有 2 个 WAR 应用程序 我想将它们部署在 Wildfly 10 JBoss 7 EAP 的单个实例中 我如何在两场战争之间共享会话 身份验证 Ex EAR1 WAR1 EJB libs EAR2 WAR2
  • 如何在matlab中计算指数而不得到inf?

    标题说明了一切 我想在 matlab 中计算一个大数字的指数 但我得到了溢出 它只返回无穷大 gt gt 100 1000 ans Inf 上次我检查时 100 1000 明显小于无穷大 正如 Daniel 已经指出的那样 这个数字太大了
  • 如果不允许跨域ajax调用那么你应该如何使用谷歌电子表格API

    如果不允许跨域ajax调用那么你应该怎么做this 注意 链接已废弃 问题已更新为相关原始页面的相关部分 来自链接 开发人员指南 协议 v 2 0 Google Spreadsheets API 添加一行 要向表中添加一行 首先创建一个
  • 如何检测用户何时清除应用程序的通知

    我的应用程序有通知功能 当我收到通知时 我的应用程序图标中会显示一个徽章 据我所知 当我的应用程序处于后台时 由于用户没有单击通知中心的通知 因此我的应用程序不知道它有通知 所以它不能改变徽章号码 也来自这个主题 检测用户何时清除通知中心的
  • 执行 del 批处理文件时排除 temp 内的文件夹

    如果我想排除要删除的文件夹内的文件夹 我应该在 DEL 批处理文件中添加什么 我有这个代码来删除临时文件夹的所有内容 DEL F Q C temp 现在 我想排除一个名为导入文件夹里面 无论它是否存在于临时文件夹中 都不应被删除 我该怎么做
  • 如何在编译的 dart 中请求全屏

    我正在玩一个 Dart 应用程序 试图让全屏模式正常工作 我的 HTML 不包括样板 div Clicking this should cause it to go fullscreen div 我的飞镖代码 import dart htm
  • 您需要在此活动中使用 Theme.AppCompat 主题(或后代)。更改 Theme.AppCompat 会导致其他错误

    我在我的应用程序中使用 appcompat v22 1 0 并使用工具栏 我使用时一切都很好Theme AppCompat Light NoActionBar 当我开始实施时AlertDialog 它会产生这样的错误 java lang I
  • 在 AngularJS 中从父控制器调用指令控制器的方法

    我正在使用 AngularJS 并且我有一个指令 它有自己的控制器 它继承了父控制器的范围 例如 请考虑以下情况 function ParentCtrl scope aMethod function DO SOMETHING functio
  • 表视图单元格按钮关闭是否需要弱自我

    为了避免保留循环 将使用 weak self in在 UITableViewCell 按钮操作中是否有必要 例子 在视图控制器中cellForRow cell buttonAction cell weak self in self some
  • 如何将表单提交事件传播到自定义指令的父级?

    我有一个简单的 AngularJS 项目 我从用户那里获取输入数据并根据该数据生成图表 我试图弄清楚如何组织代码 使其符合MVC设计模式 特别是 我一直在弄清楚如何将表单的提交事件传播到自定义指令的父级 我正在寻找某种回调机制 似乎有多种选
  • 序数尺度行为

    我想创建一个序数尺度 范围和域之间具有一一对应的关系 我希望不属于该域的值 字符串不会返回任何内容 相反 我得到以下行为 var x d3 scaleOrdinal domain a b c range 10 20 30 x d 10 x
  • CardLayout 的父容器/面板

    我如何获得任何面板的 容器 面板CardLayout 也就是说 如果面板是一张卡片 在另一个 容器 面板中 那么如何从卡中获取对此 容器 面板的引用 这就是我正在做的 public class LogInPanel extends java
  • 删除所有不符合特定条件的数组元素

    我一直在调查array map但不确定这是否是最好的方法 我目前从我的返回以下数组scandir Array 0 gt 1 gt 2 gt DS Store 3 gt post my first test post html 4 gt po
  • 什么是休息?有点困惑[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我假设 REST 是一种 Web 服务 但我的想法似乎是错误的 那么 什么是 REST 我已经通读了维基百科 但仍然无法完全理解它 为什么很多地方将 API 称为 REST AP
  • 在 PHP PDO 中如何获取 PostgreSQL upsert 查询的“RETURNING”子句值

    我用 postgreSQL 编写了这个 upsert 查询 statement INSERT INTO CharactersUnlockToBuyLevels CharacterId LevelId AmountToBuy EagleSta
  • 如何检测 Windows 开始菜单/开始屏幕何时打开?

    如何为 Windows 开始菜单 或 Windows 8 开始屏幕 打开设置事件处理程序或回调 或者 至少 如何检查开始菜单当前是否打开 我更喜欢用 C 解决这个问题 但也非常感谢用 C 解决这个问题 显然 开始屏幕可见性回调 事件不适用于
  • 尝试使用 IIF 作为三元运算符/不评估两边

    我需要使用iif 对于我检查和分配值的情况 例如 Range A1 Value IIf IsNull Range A2 Value MsgBox 1 MsgBox 2 我真的对此感到困惑 该行正在执行两者MsgBoxes 我只需要执行其中之
  • pandas dataframe where子句带有点与括号列选择

    我有一个带有字符串类型 对象 列的常规 DataFrame 当我尝试使用相当于 WHERE 子句的列来过滤时 我得到了KeyError当我使用点符号时 当使用括号表示法时 一切都很好 我指的是这些说明 df df colA blah df
  • 正则表达式获取具有特定子字符串的类名

    我需要 javascript 中的正则表达式 它将从空格分隔的字符串列表中获取具有特定子字符串的字符串 例如 我有 widget util cookie i18n 用户名 我希望能够仅返回 i18n 用户名 How 您可以使用以下函数 使用
  • 省略 C++ 模板参数列表时的差异

    什么时候可以省略 C 模板参数列表 例如 在 Visual Studio 2010 中 这段代码可以正常编译 template