<iterator>のstd :: sizeが生の配列パラメーターで機能しないのはなぜですか

DuncanACoulter

私は通常、最新のC ++のサポートされている最高バージョンがC ++ 14である環境で作業します。私はc ++ 17std::sizefromを試していまし<iterator>たが、次の問題/問題/私の側の理解の欠如に遭遇しました。

次のコードスニペットではsize(a)、inの使用はmain正しく機能しますが、inの使用はprintno matching function for call to 'size(int*&)'存在することを示すコンパイル拒否します

これを行う他のより良い方法があることは知っていますが、なぜそれが一方のコンテキストで機能し、もう一方のコンテキストでは機能しないのかを知りたいと思います。

その価値のために、私は次のオンラインコンパイラを使用し、単に-std=c++17フラグをオンにしました。

#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

void print(int a[])
{
   for(int i = 0; i < size(a); i++)
        cout << a[i] << endl;
}

int main() 
{
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    cout << "Directly" << endl;
    for(int i = 0; i < size(a); i++)
        cout << a[i] << endl;

    cout << "Via function" << endl;
    print(a);

    return 0;
}
lubgr

の最初の呼び出しでstd::sizeは、この関数テンプレートシグネチャ使用します(ここで設定されたオーバーロードの#3 ):

template <class T, std::size_t N>
constexpr std::size_t size(const T (&array)[N]) noexcept;

引数arrayがポインタに減衰していない場合。これは、サイズが型にエンコードされた生の配列です。そのような配列をint[](またはint*、それは問題ではない)を受け入れる関数に渡すと、配列はポインターに減衰し、サイズは型の一部ではなくなります。そのためstd::size(a)、コンパイルできません。簡潔に:

なぜ<iterator>S」std::size生の配列パラメーターで作業していませんか?

ですが、配列パラメーターではなく、ポインターを使用して使用しようとしています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

std :: vector :: eraseパラメータがconst_iteratorに変更されたのはなぜですか?

分類Dev

iterator_applyの例で3番目のパラメーターが必要なのはなぜですか

分類Dev

iterator.hasNextがBlockingQueueで機能しないのはなぜですか?

分類Dev

<ui:repeat>がjava.util.Iteratorで機能しないのはなぜですか?

分類Dev

std :: make_raw_storage_iteratorがないのはなぜですか?

分類Dev

std :: iteratorが廃止されたのはなぜですか?

分類Dev

std :: iteratorが廃止されたのはなぜですか?

分類Dev

std :: iteratorが廃止されたのはなぜですか?

分類Dev

Scalaで、Iterator [Match]が長さを示しているのに、データがないのはなぜですか?

分類Dev

const_iteratorがreverse_iteratorのようなベースを提供しないのはなぜですか?

分類Dev

iterator.forEachRemainingがコンシューマーラムダの要素を削除しないのはなぜですか?

分類Dev

矢印演算子「->」がboost :: numeric :: ublas :: vector <...> :: iteratorで機能しないのはなぜですか?

分類Dev

配列パラメーターを使用したメソッドが正しく機能しないのはなぜですか?(C ++)

分類Dev

JavaのIteratorがIterableではないのはなぜですか?

分類Dev

IFSからのセパレータが配列拡張に機能しないのはなぜですか?

分類Dev

コマンド「grep」がパラメータなしで機能しないのはなぜですか?

分類Dev

Symbol.iteratorへの割り当てでエラーがスローされないのはなぜですか?

分類Dev

Iterator <?>とJavaのIterator

分類Dev

SpringSecurityがパスワードの文字配列パラメータを提供しないのはなぜですか

分類Dev

SpringSecurityがパスワードの文字配列パラメータを提供しないのはなぜですか

分類Dev

std :: reverse_iterator :: operator []の戻り値の型が指定されていないのはなぜですか?

分類Dev

テンプレートパラメータパックが機能しないのはなぜですか?

分類Dev

hg gexportが--cwdパラメーターで機能しないのはなぜですか?

分類Dev

このオプションのパラメータLINQWHEREが機能しないのはなぜですか?

分類Dev

このGoogleApps Scriptのパラメータが期待どおりに機能しないのはなぜですか?

分類Dev

値で渡された配列のstd :: sizeが機能しないのはなぜですか?

分類Dev

値で渡された配列のstd :: sizeが機能しないのはなぜですか?

分類Dev

事前の割り当てがないと、次の関数がIteratorオブジェクトで機能しないのはなぜですか?

分類Dev

テンプレートパラメータの解凍がstd :: functionで機能しないことがあるのはなぜですか?

Related 関連記事

  1. 1

    std :: vector :: eraseパラメータがconst_iteratorに変更されたのはなぜですか?

  2. 2

    iterator_applyの例で3番目のパラメーターが必要なのはなぜですか

  3. 3

    iterator.hasNextがBlockingQueueで機能しないのはなぜですか?

  4. 4

    <ui:repeat>がjava.util.Iteratorで機能しないのはなぜですか?

  5. 5

    std :: make_raw_storage_iteratorがないのはなぜですか?

  6. 6

    std :: iteratorが廃止されたのはなぜですか?

  7. 7

    std :: iteratorが廃止されたのはなぜですか?

  8. 8

    std :: iteratorが廃止されたのはなぜですか?

  9. 9

    Scalaで、Iterator [Match]が長さを示しているのに、データがないのはなぜですか?

  10. 10

    const_iteratorがreverse_iteratorのようなベースを提供しないのはなぜですか?

  11. 11

    iterator.forEachRemainingがコンシューマーラムダの要素を削除しないのはなぜですか?

  12. 12

    矢印演算子「->」がboost :: numeric :: ublas :: vector <...> :: iteratorで機能しないのはなぜですか?

  13. 13

    配列パラメーターを使用したメソッドが正しく機能しないのはなぜですか?(C ++)

  14. 14

    JavaのIteratorがIterableではないのはなぜですか?

  15. 15

    IFSからのセパレータが配列拡張に機能しないのはなぜですか?

  16. 16

    コマンド「grep」がパラメータなしで機能しないのはなぜですか?

  17. 17

    Symbol.iteratorへの割り当てでエラーがスローされないのはなぜですか?

  18. 18

    Iterator <?>とJavaのIterator

  19. 19

    SpringSecurityがパスワードの文字配列パラメータを提供しないのはなぜですか

  20. 20

    SpringSecurityがパスワードの文字配列パラメータを提供しないのはなぜですか

  21. 21

    std :: reverse_iterator :: operator []の戻り値の型が指定されていないのはなぜですか?

  22. 22

    テンプレートパラメータパックが機能しないのはなぜですか?

  23. 23

    hg gexportが--cwdパラメーターで機能しないのはなぜですか?

  24. 24

    このオプションのパラメータLINQWHEREが機能しないのはなぜですか?

  25. 25

    このGoogleApps Scriptのパラメータが期待どおりに機能しないのはなぜですか?

  26. 26

    値で渡された配列のstd :: sizeが機能しないのはなぜですか?

  27. 27

    値で渡された配列のstd :: sizeが機能しないのはなぜですか?

  28. 28

    事前の割り当てがないと、次の関数がIteratorオブジェクトで機能しないのはなぜですか?

  29. 29

    テンプレートパラメータの解凍がstd :: functionで機能しないことがあるのはなぜですか?

ホットタグ

アーカイブ