return 在具有 std::async 的函数中

return in functions with std::async

我有一个函数应该总是 return A[0][1]。但是我使用 std::async 并且 gcc 说:

test_fibonacci_method/1/main.cpp:147:1: warning: control reaches end of non-void function [-Wreturn-type]

Integer Fib_iterative_n_Matrix(const unsigned& n) {
    if (n < 2) return n; // Fib(0):=0 and Fib(1):=1
    std::array<std::array<Integer,2>,2> A = {1,0,0,1}, FIB = {1,1,1,0};

    auto a = std::async(std::launch::async, [&]() { Matrixpower_A_time_B_pow_x(A, FIB, n); return true; });

    if (a.get()) { // blocks
        return A[0][1]; // fib(n)
    }
}

如何用 A[0][1] 更改最后一个 IF?

好的,我现在明白 if 是不必要的了。而 a.get() 也太多了,因为没有使用 lambda 的结果 a.wait() 更好。

Integer Fib_iterative_n_Matrix(const unsigned& n) {
    if (n < 2) return n; // Fib(0):=0 and Fib(1):=1
    std::array<std::array<Integer,2>,2> A = {1,0,0,1}, FIB = {1,1,1,0};

    auto a = std::async(std::launch::async, [&]() { Matrixpower_A_time_B_pow_x(A, FIB, n); return true; });

    a.wait(); // blocks
    return A[0][1]; // fib(n)
}