[解決済み] なぜsizeofは演算子として扱われるのですか?
2023-01-29 21:14:24
疑問点
なぜ
sizeof
は関数ではなく演算子とみなされるのでしょうか?
演算子として認められるためには、どのような性質が必要ですか?
どのように解決するのですか?
C言語規格がそう言っていて、唯一の票を得るからです。
結果論として
-
sizeofのオペランドは括弧で囲まれた型にすることができます。
sizeof (int)
といったオブジェクト式ではなく、括弧で囲まれた型にすることができます。 -
括弧は不要です。
int a; printf("%d\n", sizeof a);
は全く問題ありません。括弧がよく見られるのは、第一に型キャスト式の一部として必要だからであり、第二に sizeof が非常に高い優先度を持つからで、したがってsizeof a + b
と同じではありません。sizeof (a+b)
. しかし、それらは sizeof の呼び出しの一部ではなく、オペランドの一部です。 - sizeofのアドレスは取れません。
-
sizeofのオペランドである式が実行時に評価されない(
sizeof a++
は a を変更しません)。 - sizeofのオペランドである式は、voidや関数型以外の任意の型を持つことができます。実際、それがsizeofのポイントのようなものです。
関数はこれらの点すべてにおいて異なるでしょう。関数と単項演算子の間には他にも違いがあるでしょうが、sizeof が関数であることを望む理由があったとしても、なぜ関数になり得ないのかを示すにはこれで十分だと思います。
関連
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み] 構造体のsizeofは、なぜ各メンバーのsizeofの合計と等しくないのですか?
-
[解決済み] FortranはC言語よりも重い計算を最適化しやすいですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
error: 'for' loop initial declaration is only allowed in C99 mode 原因と解決方法
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
-
[解決済み] ⑭と⑯は何のためにあるのですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] while ( !feof (file) ) 」は、なぜいつも間違っているのですか?
-
[解決済み] なぜsizeof(x++)はxをインクリメントしないのですか?
-
[解決済み] なぜ16進数には0xがつくのですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
-
[解決済み] なぜ sizeof(my_arr)[0] はコンパイルして sizeof(my_arr[0]) と同じになるのでしょうか?