私はRustとシステムプログラミング全般の初心者です。Rustのconst型をインライン化するのはどういう意味ですか?
定数は、プログラムの全寿命にわたって存在します。具体的には、Rustの定数にはメモリ内の固定アドレスがありません。これは、使用されている各場所に効果的にインライン展開されているためです。同じ定数への参照が、同じ理由で同じメモリアドレスを参照するとは必ずしも保証されません。
私はinline functions
をC++でしか見つけられませんでしたが、インラインconst型はありませんでした。誰かがこれがどのように動作するかの初心者のフレンドリーな説明を提供してください?
また、私は少しno fixed address in memory
と混同しています。つまり、const
タイプを使用するたびにスタックの値がこの式のためだけに割り当てられ、式の実行後にが破棄されてになりますか?
なぜC++ enumが最も近いのか説明できますか? –
@PavelStrakhov:C++の 'enum'値は、メモリアドレスを持たない名前付きの値です(' enum {X} 'があれば '&X'でコンパイル時エラーが発生します)、列挙型の値は使用場所ごとにインライン展開されています。それは一度だけ計算されるので(そして、それはもっと洗練されています:スコープなどを尊重します)、 '#define'より少し近いです。 –
コンパイラがコピーを避けるために 'static'に変換することを決めるのと同じように思えますが、本当にそうですか?私はそれを行うためにコンパイラを得ることができないようです。明らかに最適ではない場合でも、式をインライン展開するのと同等のコードを生成します。 – Veedrac