私はそれを自分でテストしたいと思っていますが、現状では残念ながらそれは不可能です。参照データ型のアンパサンドは、参照自体のアドレスまたは参照している値を返しますか?
答えて
、参照は実際にはオブジェクトではありません。アドレス自体はありません。コンパイラが解釈するオブジェクトのエイリアスと考える方が簡単です。
とにかく、あなたは常に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. Javaの戻り参照値(または参照によって)
- 2. 参照型を参照型以外の参照型に変換する
- 3. が参加しました実体を参照する
- 4. 値型と参照型
- 5. 代議員参照自体
- 6. C# - 値型の参照ラッパー
- 7. RWCString - 値渡しまたはconst参照
- 8. 、参照型対値型の使用は
- 9. 自己参照汎用型
- 10. 返す参照
- 11. 返す参照
- 12. 多型参照
- 13. LINQエンティティ参照の参照先を選択しますか?
- 14. 参照渡しと参照渡し
- 15. C#ジェネリックス:参照型と値
- 16. .NETの参照型
- 17. オブジェクトインスタンスの参照を返します。
- 18. 派生参照型へのC#参照型のクローニング
- 19. C++ 11関数型の参照を参照で定義する
- 20. C++の参照への参照を間接参照
- 21. それ自体を参照するtypedef
- 22. Haskellは独自のモジュールの値を参照します
- 23. ioremapアドレスの参照解除
- 24. C++の参照、アドレス、ポインタ
- 25. 継承メソッドが参照型を返しました
- 26. pthreadの参照渡し値
- 27. constポインタ参照を返します
- 28. String.Substring():コピーまたは参照?
- 29. 値または参照で返されますか?
- 30. Web参照とサービス参照の違いは何ですか?
具体的なコード例で質問を記入してください。 – TemplateRex
関数に渡すときの参照? –
質問はかなり明確です。私が間違っていなければ、リファレンスはどこにあっても参照です。 –