3

配列の途中で const ポインターを抽出しようとしています。ベクトルを使用すると問題なく動作することがわかりましたが、valarray を使用するとコンパイルされません (VS 2008)。誰かが問題が何であるかを説明できますか?

struct vector_test
{
    std::vector<int> v;

    const int *pointy(const int i) const
    {
        return &(v[i]); // Ok
    }
};

struct valarray_test
{
    std::valarray<int> v;

    const int *pointy(const int i) const
    {
        return &(v[i]); // error C2102: '&' requires l-value
    }
};
4

1 に答える 1

12

std::valarray<T>::operator [](std::size_t)正常に動作する を返しますT&

std::valarray<T>::operator [](std::size_t) consta を返しますT。これは右辺値になるため、そのアドレスを取得することはできません。

valarray_test::pointyis 自体がconstであるため、valarray_test::vとして扱われconst、その結果、 のconstオーバーロードoperator[]が呼び出されます。作るvalarray_test::v mutableか、valarray_test::pointy非にするかのどちらかconstです。

于 2011-05-20T00:29:17.053 に答える