私はそれを自分でテストしたいと思っていますが、現状では残念ながらそれは不可能です。参照データ型のアンパサンドは、参照自体のアドレスまたは参照している値を返しますか?
答えて
、参照は実際にはオブジェクトではありません。アドレス自体はありません。コンパイラが解釈するオブジェクトのエイリアスと考える方が簡単です。
とにかく、あなたは常にIdeOne
#include <stdio.h>
void func(int &z)
{
printf("&z: %p", &z);
}
int main(int argc, char **argv)
{
int x = 0;
int &y = x;
printf("&x: %p\n", &x);
printf("&y: %p\n", &y);
func(x);
return 0;
}
Executed online, with resultsとオンラインでコードをテストすることができます。
オンラインコンパイラ?うわー、なぜ私はこれを考えなかったのですか? –
それはかなり華麗です:)あなたはそれを愛するでしょう。 –
参照が格納を必要とするかどうかは不特定であるため、オブジェクトである可能性があります(8.3.2/4)。ただし、参照に適用された式は参照されるオブジェクトに転送されます(§5/ 5) –
参照している値のアドレスを返します。
値のアドレス。 あなたは常にcodepad上で確認することができます
(参照のアドレスのようなものはありません):ポインタとは異なりhttp://codepad.org/I1aBfWAQ
さらなる実験:中間結果の検査を可能にするオンラインコンパイラがあります!
試してみてLLVMとクランページにマフムードの例を取ると、私たちは以下のLLVM IR(切り捨て)を取得します。 %x
(名前がC関数のそれに似ている疑い):
define i32 @main() nounwind uwtable {
%x = alloca i32, align 4
store i32 0, i32* %x, align 4, !tbaa !0
%1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8]* @.str, i64 0, i64 0), i32* %x)
%2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8]* @.str1, i64 0, i64 0), i32* %x)
%3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8]* @.str2, i64 0, i64 0), i32* %x) nounwind
ret i32 0
}
...構文はあまり重要ではなく、重要なことは、単一の変数が宣言されていることに注意することです。
これは、コンパイラがy
とz
という変数を省略したことを意味します。つまり、これらの変数は割り当てられません。
私はそれにビート:)私は家に帰ると、中間オブジェクトコードのどこかに実際のオブジェクトが作成されているかどうかを確認するつもりでした。今私は、オブジェクトが作成されるのに十分複雑な例を(もしあれば)理解する必要があります。 +1 –
@ MahmoudAl-Qudsi:関数の引数を生成する必要があります。関数がインライン化されていても、静的でない限り、Clangは別の翻訳単位で使用される可能性があるため、その定義を出力します。 –
はい。私の投稿のサンプルコードは、あなたが予測した通り、このLLVMバイトコード:http://pastebin.com/bZ4PZvupになります。 –
- 1. 参照型または値型?
- 2. Javaの戻り参照値(または参照によって)
- 3. カテゴリーモデル参照自体は
- 4. 参照型を参照型以外の参照型に変換する
- 5. rewritecond regexのrewriterule参照グループを参照していますか?
- 6. ヌルオブジェクト参照を参照しようとしていますか?
- 7. セルの値/参照を返します
- 8. メソッドは、値への参照配列を参照しています
- 9. TypeScriptの自己参照型
- 10. Webサービス参照の参照はすべてのオブジェクトを参照していません
- 11. このコールバックは参照外のクロージャを参照していますか?
- 12. 代議員参照自体
- 13. fk参照のUnkownデータ型
- 14. が参加しました実体を参照する
- 15. 値型と参照型
- 16. 自己参照汎用型
- 17. C# - 値型の参照ラッパー
- 18. 、参照型対値型の使用は
- 19. COMアプリケーションはdllを参照してDLLを参照しています
- 20. RWCString - 値渡しまたはconst参照
- 21. 逆参照ポインタへの参照を作成しますか?
- 22. LINQエンティティ参照の参照先を選択しますか?
- 23. セル参照内のセルを参照しますか?
- 24. Excel - 参照内の参照
- 25. 返す参照
- 26. 返す参照
- 27. 多型参照
- 28. ポインタへの参照対参照渡し?
- 29. ゼロMACアドレスは何を参照していますか?
- 30. Varまたは動的変数参照型または値型?
具体的なコード例で質問を記入してください。 – TemplateRex
関数に渡すときの参照? –
質問はかなり明確です。私が間違っていなければ、リファレンスはどこにあっても参照です。 –