問題タブ [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.
c++ - バイナリのサイズが配列のサイズに依存するのはなぜですか?
私は最近、自分では説明できない非常に奇妙なコード膨張効果に出くわしました... 以下は、動作する最小限の例です。
結果のバイナリ (GCC MinGW 4.9.2 x86_64 posix sjlj でビルド) のサイズは15.28 MBです。ただし、eg を設定すると、代わりに17 KBのバイナリSIZE = 1
が取得されます。
では、バイナリのサイズが配列のサイズに依存するのはなぜですか? どうやら、効果は構造体がシングルトンであることが原因です。それでも、コンパイラがバイナリを肥大化させるもっともらしい理由はまだわかりません。ご協力いただきありがとうございます!
(最適化の有無にかかわらず、-std=c++11
フラグのみを使用してテストされました。ところで、これはCスタイルの配列でも発生します...)
c++ - std::array と配列のパフォーマンス
次のような非常に単純な配列を作成したい場合
std::array
代わりに使用する必要がありますか?
通常のものよりも std::array を使用する利点は何ですか? より高性能ですか?コピー/アクセスの扱いが簡単ですか?
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
?
c++ - Visual Studio std::array 初期化子のバグ (2797)
現在、Visual Studio には問題があり、次のコードがコンパイルされず、エラーが発生します。
エラー C2797: 'vec::v': メンバー初期化子リスト内のリスト初期化または非静的データ メンバー初期化子が実装されていません
そのためのMicrosoft Connect チケットはクローズされていますが、「内部リストの明示的な構築を使用する」ことを推奨する MSDN の記事があります。これを行う方法がわかりません。また、コードは私 (初心者) には非常に異質に見えます。
std::array を使用した例を手伝ってくれる人はいますか?
c++ - 任意の長さ (ただし定数) の std::array のセットの格納
配列の長さを後で constexpr で使用できる、任意の (ただし一定の) 長さの std::arrays のセットを格納する方法はありますか?
標準コンテナは論外だと思いますが、何らかのテンプレート ソリューションがあるかもしれません。すべての情報はコンパイル時に利用可能ですよね?
コード例:
アップデート:
詳細が求められたので、ここに行きます。配列がどのように定義されているか、機能するものは何でも気にしません...使用される正確な constexpr は、サンプルコードのものですstd::make_index_sequence<CONSTEXPR>{}
。コンパイル時に定義された一連の定数配列があることを知っているだけで、 constexpr の他の場所でそれらの長さを参照できるはずです。
一体、私は実際には長さを保存するだけで問題ありません:
c++ - std::array<> の初期化
次のコードを検討してください。
gcc でコンパイル:
NB1: 最初の初期化ステートメントをコメントアウトすると、コードはエラーなしでコンパイルされます。
NB2: すべての初期化をコンストラクター呼び出しに変換すると、同じ結果が得られます。
NB3: MSVC2015 は同じように動作します。
最初の初期化がコンパイルに失敗する理由と、2 番目と 3 番目の初期化が問題ない理由がわかります。(例: C++11: 正しい std::array の初期化?を参照してください。)
私の質問は次のとおりです。最終的な初期化がコンパイルされるのはなぜですか?