当前位置:   iOS > 正文

不使用'&',C++模板无法推断引用类型

c++,templates,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

这是一个非常简单的例子:

#include 

template
void DoubleMe(T x) {
    x += x;
}

int main()
{
    int a = 10;
    DoubleMe(a);
    std::cout << a; //displays 10 not 20!
}

在这种情况下,我是否被迫在函数参数中使用'T&'?Cuz我在一些教程中读到模板可以正确地推导出适当的数据类型,包括T*,T []或T&只需在变量之前定义一个简单的'T'.救命?



1> Ami Tavory..:

是的,要获得您想要的效果,您必须添加&符号.

在编写时,模板可以正确推断数据类型.但是,他们可以推断出意图.在这种情况下,传递它的类型是一个整数,并且它正确地实例化一个整数函数,该函数在内部将按值传递给它的参数加倍.您认为函数具有副作用的事实不是编译器可以猜到的.


虽然这个答案肯定是正确的,但应该注意的是,即使`a`的类型实际上是`int&`,`T`仍然会被推导为`int`.不幸的是,我认为没有一种正确而简洁的方式来陈述C++类型的演绎规则.

2> 小智..:

你确实可以用plain来正确推导出引用类型T.不幸的是,这并不意味着你认为它意味着什么.

特定

template  struct S { };
template  void f(S) { }
int main() { f(S{}); }

类型参数f被正确推导为int&.

问题是,你的情况,推断Tint已经产生了非常有效的作用.也许是略微过度简化,但类型推导产生最简单T的调用工作.在您的情况下,T = int使呼叫工作.不是你希望它的工作方式,但编译器无法知道.T = int &也可以使呼叫工作,但它不是最简单的T使它工作.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/iOS/detail/8679
推荐阅读
  • 如何解决《没有结果时,Firebase查询不会调用阻止》经验,为你挑选了1个好方法。ios,firebase,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线... [详细]

  • 如何解决《iOS8上的自动布局错误,但iOS9上没有》经验,为你挑选了0个好方法。uikit,ios,autolayout,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在... [详细]

  • 如何解决《Swift是否有任何原生并发和多线程支持?》经验,为你挑选了1个好方法。concurrency,multithreading,native,swift,服务器,ios,ubuntu,cocoa,git,DevBox,在线流程图,编... [详细]

  • 如何解决《启动时无法隐藏状态栏》经验,为你挑选了0个好方法。objective-c,ios,ios9,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工... [详细]

  • 如何解决《游乐场不工作》经验,为你挑选了0个好方法。ios,xcode7,xcode,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具... [详细]

  • 如何解决《iOSv.8.3及更高版本中的配置文件"未经过验证"》经验,为你挑选了0个好方法。iphone,ssl,configuration-files,ios,服务器,https,DevBox,在线流程图,编程,编程问... [详细]

  • 如何解决《创建没有开发人员证书的ipa进行远程分发》经验,为你挑选了0个好方法。iphone,xcode,ios,ios9,xcode7,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,un... [详细]

  • 如何解决《适用于iOS9+的Objective-CiOS日历视图》经验,为你挑选了1个好方法。iphone,objective-c,ios,cocoapods,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工... [详细]

  • 如何解决《iOS中不同位置的商店数据库有何不同?》经验,为你挑选了1个好方法。database,ios,sqlite.swift,sql,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维... [详细]

  • 如何解决《UITextfield在UITableViewCells中-关闭键盘》经验,为你挑选了1个好方法。uitextfield,ios,uitextfielddelegate,swift,objective-c,DevBox,在线流程图... [详细]

  • 如何解决《从移动应用程序中的PCI-DSS开始?》经验,为你挑选了0个好方法。mobile,android,pci-dss,ios,pci-compliance,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,jso... [详细]

  • 如何解决《如何在一系列数字中找到缺失的数字?》经验,为你挑选了1个好方法。c++,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员... [详细]

  • 如何解决《iOS蓝牙背景模式》经验,为你挑选了1个好方法。bluetooth,ios,bluetooth-lowenergy,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,... [详细]

  • 如何解决《返回值优化和析构函数调用》经验,为你挑选了1个好方法。c++,c++11,容器,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,... [详细]

  • 如何解决《为什么杰克逊多态序列化在列表中不起作用?》经验,为你挑选了2个好方法。java,serialization,json,jackson,xml,ios,mvc,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,... [详细]

  • 如何解决《iOS9"游戏中心无法识别此游戏."》经验,为你挑选了3个好方法。ios,game-center,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,u... [详细]

  • 如何解决《将WinForms表单嵌入到Inno安装向导中》经验,为你挑选了1个好方法。c#,inno-setup,winforms,ios,https,git,rpc,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,... [详细]

  • 如何解决《使用termiosapi检测字符设备是否已在Linux中断开连接(c++)》经验,为你挑选了0个好方法。c++,linux,serial-port,termios,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工... [详细]

  • 如何解决《谁首先在类加载过程中创建Class<?>对象?》经验,为你挑选了2个好方法。java,classloader,ios,bootstrap,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json... [详细]

  • 如何解决《什么时候调整.FontSizeToFitWidth或boundingRectWithSize更改context.actualScaleFactor?》经验,为你挑选了0个好方法。font-size,uilabel,ios,draw... [详细]

相关标签
  

闽ICP备14008679号