1

Herb Sutter の "Writing Good C++14... By Default" ( https://www.youtube.com/watch?v=hEx5DNLWGgA ) の最初の部分を見たところですが、(愚かな可能性がある) 質問があります。 array_viewについて。

提示されたケースは、ポインター演算を避けるためにポインターと長さの代わりに array_view を送信していましたが、array_view は次のようなケースをどのように処理できますか。

int vec[10];
func(vec+2, 5); //start from the 2nd element and process 5 of them

array_view はこの種のものをサポートしていますか、それともユースケースが間違っていますか?

4

2 に答える 2

4

まず、スライドcppcon の Github repoから入手できます。

#8とでわかる#10ように、次のように記述できます。

Run It Online !

// http://llvm.org/apt/
// sudo apt-get install clang-3.6 lldb-3.6 libc++-dev libc++abi-dev
// clang-3.6 -stdlib=libc++ -std=c++14 main.cpp -lc++ -lc++abi

#include <array>
#include <vector>
#include "array_view.h"  // https://github.com/Microsoft/GSL

void func(gsl::array_view<int> av)
{
    // ...
}

int main()
{
    {
        int vec[10];
        func(vec);
        //func(vec, 5);    // syntax error (func expects exactly 1 argument)
        func({vec, 5});    // notice the curly braces
        func({vec+2, 5});
    }

    {
        std::vector<int> vec;
        func(vec);
    }

    {
        size_t len = 10;
        int* p = new int[10];
        func({p,len});
        // remember to delete[] p
    }

    {
        std::array<int, 2> arr;
        func(arr);
    }
}

そして、それは理にかなっています。array_view.hを見ると、すべてarray_viewのコンストラクターが表示されます。

constexpr array_view(pointer ptr, bounds_type bounds)
constexpr array_view(T * const & data, size_type size)
constexpr array_view(T(&arr)[N], size_type size)
constexpr array_view (const std::array<std::remove_const_t<value_type>, N> & arr)
// ...
于 2015-10-22T08:53:36.797 に答える