相关疑难解决方法(0)

静态类型语言和动态类型语言有什么区别?

我听到很多新的编程语言都是动态输入的,但是当我们说一种语言是动态类型而非静态类型时,它实际意味着什么呢?

computer-science programming-languages static-typing dynamic-typing

894
推荐指数
11
解决办法
40万
查看次数

我什么时候应该使用C++ 14自动返回类型扣除?

随着GCC 4.8.0的发布,我们有一个支持自动返回类型推导的编译器,这是C++ 14的一部分.有了-std=c++1y,我可以这样做:

auto foo() { //deduced to be int
    return 5;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该何时使用此功能?什么时候需要,何时使代码更清洁?

场景1

我能想到的第一个场景是可能的.每个可以用这种方式编写的函数都应该是.这个问题是它可能并不总是使代码更具可读性.

情景2

下一个场景是避免更复杂的返回类型.作为一个很轻的例子:

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)

我不相信这确实会成为一个问题,虽然我认为在某些情况下明确依赖于参数的返回类型可能更清楚.

场景3

接下来,为了防止冗余:

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};代替向量,但这并不总是有效,我们需要在函数头和函数体中指定类型.这纯粹是多余的,自动返回类型扣除使我们免于冗余.

场景4

最后,它可以用来代替非常简单的功能:

auto position() {
    return pos_;
}

auto area() {
    return …
Run Code Online (Sandbox Code Playgroud)

c++ return-type-deduction c++14

137
推荐指数
5
解决办法
4万
查看次数