問題タブ [stdarray]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
449 参照

c++ - バイナリのサイズが配列のサイズに依存するのはなぜですか?

私は最近、自分では説明できない非常に奇妙なコード膨張効果に出くわしました... 以下は、動作する最小限の例です。

結果のバイナリ (GCC MinGW 4.9.2 x86_64 posix sjlj でビルド) のサイズは15.28 MBです。ただし、eg を設定すると、代わりに17 KBのバイナリSIZE = 1が取得されます。

では、バイナリのサイズが配列のサイズに依存するのはなぜですか? どうやら、効果は構造体がシングルトンであることが原因です。それでも、コンパイラがバイナリを肥大化させるもっともらしい理由はまだわかりません。ご協力いただきありがとうございます!

(最適化の有無にかかわらず、-std=c++11フラグのみを使用してテストされました。ところで、これはCスタイルの配列でも発生します...)

0 投票する
6 に答える
56548 参照

c++ - std::array と配列のパフォーマンス

次のような非常に単純な配列を作成したい場合

std::array代わりに使用する必要がありますか?

通常のものよりも std::array を使用する利点は何ですか? より高性能ですか?コピー/アクセスの扱いが簡単ですか?

0 投票する
3 に答える
2464 参照

c++ - Initialization of std::array with std::initializer_list in constructor's initialization list

Consider the following piece of code:

The code above compiles fine and initializes v as expected. Now consider the following piece of code:

The above piece of code gives a compile error.

error: no viable conversion from 'std::initializer_list' to 'int'

Searching the web I found that the "proper" way to initialize a member std::array with a std::list_initializer is to use reinterpret_cast in the following manner:

Q:

Why I can initialize a member std::vector with an std::initializer_list in the initialization list of a constructor but I can't a member std::array?

Is the work-around showed above with reinterpret_cast the proper way to initialize a member std::array with a std::initializer_list?

0 投票する
2 に答える
1288 参照

c++ - Clang は、gcc が配列を初期化しないときに配列を集約すると警告します

次のコードを CLANG でコンパイルすると:

次のコマンドを発行します。

clang++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp

次の警告が表示されます。

警告: サブオブジェクトの初期化を囲む中括弧を提案します [-Wmissing-braces]

クランデモ

ただし、GCC はこのプログラムをコンパイルしても、警告はまったく出されません。

GCC デモ

Q:

  1. どのコンパイラが正しいですか?
  2. Clangs が警告する理由は何ですか?
0 投票する
1 に答える
433 参照

c++ - Visual Studio std::array 初期化子のバグ (2797)

現在、Visual Studio には問題があり、次のコードがコンパイルされず、エラーが発生します。

エラー C2797: 'vec::v': メンバー初期化子リスト内のリスト初期化または非静的データ メンバー初期化子が実装されていません

そのためのMicrosoft Connect チケットはクローズされていますが、「内部リストの明示的な構築を使用する」ことを推奨する MSDN の記事があります。これを行う方法がわかりません。また、コードは私 (初心者) には非常に異質に見えます。

std::array を使用した例を手伝ってくれる人はいますか?

0 投票する
2 に答える
138 参照

c++ - 任意の長さ (ただし定数) の std::array のセットの格納

配列の長さを後で constexpr で使用できる、任意の (ただし一定の) 長さの std::arrays のセットを格納する方法はありますか?

標準コンテナは論外だと思いますが、何らかのテンプレート ソリューションがあるかもしれません。すべての情報はコンパイル時に利用可能ですよね?

コード例:

アップデート:

詳細が求められたので、ここに行きます。配列がどのように定義されているか、機能するものは何でも気にしません...使用される正確な constexpr は、サンプルコードのものですstd::make_index_sequence<CONSTEXPR>{}コンパイル時に定義された一連の定数配列があることを知っているだけで、 constexpr の他の場所でそれらの長さを参照できるはずです。

一体、私は実際には長さを保存するだけで問題ありません:

0 投票する
1 に答える
2006 参照

c++ - std::array<> の初期化

次のコードを検討してください。

gcc でコンパイル:

NB1: 最初の初期化ステートメントをコメントアウトすると、コードはエラーなしでコンパイルされます。
NB2: すべての初期化をコンストラクター呼び出しに変換すると、同じ結果が得られます。
NB3: MSVC2015 は同じように動作します。

最初の初期化がコンパイルに失敗する理由と、2 番目と 3 番目の初期化が問題ない理由がわかります。(例: C++11: 正しい std::array の初期化?を参照してください。)

私の質問は次のとおりです。最終的な初期化がコンパイルされるのはなぜですか?