10 sizeofが演算子と見なされるのはなぜですか? なぜsizeof関数ではなく演算子と見なされるのですか? オペレーターとしての資格を得るには、どのプロパティが必要ですか? 93 c operators sizeof
5 ラムダのサイズが1バイトなのはなぜですか? C ++でいくつかのラムダのメモリを使用していますが、そのサイズに少し戸惑っています。 これが私のテストコードです: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout << &f << std::endl; std::cout << sizeof(f) << std::endl; } ここで実行できます:http : //fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598 出力は次のとおりです。 17 0x7d90ba8f626f 1 これは、ラムダのサイズが1であることを示唆しています。 これはどのようにして可能ですか? ラムダは、少なくとも、その実装へのポインタであってはなりませんか? 89 c++ c++11 lambda c++14 sizeof
4 Cの関数のサイズが常に1バイトなのはなぜですか? を使用して関数のサイズを確認すると、sizeof()常に1バイトが取得されます。この1バイトは何を意味していますか? 87 c function size sizeof
3 sizeofの後に括弧を使用する必要があるのはなぜ(そしていつ)ですか? 以下はコンパイルに失敗します: typedef int arr[10]; int main(void) { return sizeof arr; } sizeof.c:3: error: expected expression before ‘arr’ しかし、私がそれをに変更した場合 sizeof(arr); すべて順調。どうして? 80 c sizeof
4 この構造はどのようにしてsizeof == 0を持つことができますか? sizeofを返す構造を要求する古い投稿があり0ます。評判の高いユーザーから、標準ではタイプや変数のサイズを0にすることはできないという高得点の回答がいくつかあります。私はそれに100%同意します。 しかし、この解決策を提示するこの新しい答えがあります: struct ZeroMemory { int *a[0]; }; 反対票を投じてコメントしようとしていましたが、ここで過ごした時間は、私が100%確信していることさえチェックすることを教えてくれました。だから...驚いたことに、両方とも同じ結果gccをclang示しています:sizeof(ZeroMemory) == 0。さらに、変数のサイズは0次のとおりです。 ZeroMemory z{}; static_assert(sizeof(z) == 0); // Awkward... わぁぁぁぁぁ…? ゴッドボルトリンク これはどのように可能ですか? 80 c++ language-lawyer sizeof
5 ビット演算は予期しない変数サイズになります 環境 PICマイクロコントローラー用の8ビットCコンパイラーを使用して最初にコンパイルされたCコードを移植しています。符号なしグローバル変数(たとえば、エラーカウンター)がゼロにロールオーバーしないようにするために使用された一般的なイディオムは次のとおりです。 if(~counter) counter++; ここでのビット演算子はすべてのビットを反転し、ステートメントが真であるのcounterは、最大値よりも小さい場合のみです。重要なことに、これは変数のサイズに関係なく機能します。 問題 現在、GCCを使用する32ビットARMプロセッサをターゲットにしています。同じコードが異なる結果を生成することに気づきました。私たちが知る限りでは、ビットごとの補数演算は予想とは異なるサイズの値を返すようです。これを再現するには、GCCでコンパイルします。 uint8_t i = 0; int sz; sz = sizeof(i); printf("Size of variable: %d\n", sz); // Size of variable: 1 sz = sizeof(~i); printf("Size of result: %d\n", sz); // Size of result: 4 出力の最初の行で、期待どおりの結果が得られますi。1バイトです。ただし、のビット単位の補数iは実際には4バイトであり、これとの比較では期待される結果が得られないため、問題が発生します。たとえば、次の場合(i適切に初期化されたはどこですかuint8_t): if(~i) i++; i0xFFから0x00までの「折り返し」が表示されます。この動作は、以前のコンパイラと8ビットPICマイクロコントローラーで意図したとおりに機能していた場合と比較して、GCCで異なります。 次のようにキャストすることでこれを解決できることを認識しています。 if((uint8_t)~i) i++; または、 if(i < 0xFF) … 24 c microcontroller bitwise-operators sizeof
3 値がsizeof演算子に直接渡されると、データ型のサイズが異なるのはなぜですか? #include <stdio.h> int main() { char a = 'A'; int b = 90000; float c = 6.5; printf("%d ",sizeof(6.5)); printf("%d ",sizeof(90000)); printf("%d ",sizeof('A')); printf("%d ",sizeof(c)); printf("%d ",sizeof(b)); printf("%d",sizeof(a)); return 0; } 出力は次のとおりです。 8 4 4 4 4 1 同じ値に対して出力が異なるのはなぜですか? 15 c int sizeof
1 インスタンスを作成せずにstd :: array <T、N>の要素数を取得する方法は? はありますがstd::array<T, N>::size()、静的ではないため、のインスタンスが必要ですstd::array。配列のインスタンスを作成せずに、それが返す値(Nのstd::array<T, N>)を取得する方法はありますか?通常の配列では、を使用することもできましたがsizeof、sizeof(std::array<T, N>) == N * sizeof(T)本当であるという保証はありません。 9 c++ arrays c++11 sizeof