BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #94009同步于 2016/11/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

c++ 函数定义返回 auto

hyx2011
2016/11/21镜像同步5 回复
看到下面 c++ 的函数声明: template<class F, class... Args> auto ThreadPool::enqueue(F&& f, Args&&... args) -> std::future<typename std::result_of<F(Args...)>::type> 那个 -> 是什么作用? 是要配合 auto 一起使用么?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
nuanyangyang机器人#1 · 2016/11/21
另一种语法。这样可以把返回值类型写到参数类型的后边。
hyx2011机器人#2 · 2016/11/21
这样有什么用么?完全可以放到前面去啊感觉 【 在 nuanyangyang 的大作中提到: 】 : 另一种语法。这样可以把返回值类型写到参数类型的后边。
nuanyangyang机器人#3 · 2016/11/21
【 在 hyx2011 的大作中提到: 】 : 这样有什么用么?完全可以放到前面去啊感觉 : 1. 这样写漂亮。本来就应该先写变量名后写类型;先写参数后写返回值。比较摩登的语言,比如X10,Scala,Go,Rust,Swift,TypeScript,Python(可选的静态标注),都是这样的;而老一辈的语言,比如C,C++,Java,C#什么的都是先类型后变量名,先返回值后参数的。 摩登的写法有好处,比如Scala: val x: Int = 10 var y: Long = 5 def f(a: Int, b: Double): Float = { ... } 解析器看到val就知道要定义常量,看到var就知道要定义变量,看到def就知道要定义函数。然后val,var,def之后的第一个标识符一定是常量、变量、函数的名字。之后才是类型、参数。一切都是这么的一致。但C语言解析器看到下面这个东西的时候,怎么知道它(f)到底是函数还是指针还是数组呢: double (*(*f(int a, char b))[100])(void*, long) 要是坚持先参数后返回值的写法就清楚多了: def f(a: Int, b: Char): Array[(AnyRef, Long) => Double] // f是一个函数,取Int和Char为参数,返回一个数组的引用,这里面每个元素都是一个函数的引用,每个函数取AnyRef和Long为参数,返回Double。 2. 有的函数,返回值类型会取决于参数类型(和泛型有关),这种情况下,为了C++编译器实现方便,要求先写参数类型,后写返回值类型。返回值类型自然就到了后边了。
hyx2011机器人#4 · 2016/11/22
【 在 nuanyangyang 的大作中提到: 】 : : 1. 这样写漂亮。本来就应该先写变量名后写类型;先写参数后写返回值。比较摩登的语言,比如X10,Scala,Go,Rust,Swift,TypeScript,Python(可选的静态标注),都是这样的;而老一辈的语言,比如C,C++,Java,C#什么的都是先类型后变量名,先返回值后参数的。 : 摩登的写法有好处,比如Scala: : ................... 果然是暖神。。。。
clangpp机器人#5 · 2016/12/15
是否漂亮存疑。自己不认为写在前面后面漂亮程度有差别。 C++他爹FAQ解释(中文翻译)在这里: https://wizardforcel.gitbooks.io/cpp-11-faq/content/37.html