之前我问了一个问题,为什么我看到这么多的例子都使用了这个var关键字并得到了答案,虽然它只是匿名类型所必需的,但它仍然被用来使编写代码"更快"/更容易和"只是因为".
在这个链接("C#3.0 - Var不是Objec")之后,我看到它var被编译成IL中的正确类型(你会在中间的文章中看到它).
我的问题是IL代码使用var关键字take 会有多少(如果有的话),如果在任何地方使用它,它是否会接近于对代码性能有可衡量的水平?
随着GCC 4.8.0的发布,我们有一个支持自动返回类型推导的编译器,这是C++ 14的一部分.有了-std=c++1y,我可以这样做:
auto foo() { //deduced to be int
return 5;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该何时使用此功能?什么时候需要,何时使代码更清洁?
我能想到的第一个场景是可能的.每个可以用这种方式编写的函数都应该是.这个问题是它可能并不总是使代码更具可读性.
下一个场景是避免更复杂的返回类型.作为一个很轻的例子:
template<typename T, typename U>
auto add(T t, U u) { //almost deduced as decltype(t + u): decltype(auto) would
return t + u;
}
Run Code Online (Sandbox Code Playgroud)
我不相信这确实会成为一个问题,虽然我认为在某些情况下明确依赖于参数的返回类型可能更清楚.
接下来,为了防止冗余:
auto foo() {
std::vector<std::map<std::pair<int, double>, int>> ret;
//fill ret in with stuff
return ret;
}
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,我们有时可以return {5, 6, 7};代替向量,但这并不总是有效,我们需要在函数头和函数体中指定类型.这纯粹是多余的,自动返回类型扣除使我们免于冗余.
最后,它可以用来代替非常简单的功能:
auto position() {
return pos_;
}
auto area() {
return …Run Code Online (Sandbox Code Playgroud)