2016-08-26 8 views
-5

私は[1]で動作するこのコードを書いていますが、私に警告メッセージ[2]を与えて、本当にdoubleのintのアドレスを設定したいと思います。私はそれがref(私は奇妙な行動を経験しません)でそれを行うに保存されている場合は、ちょうど不思議。私はdoubleをint型で作ることができます

[2]

test.cc:10:27:警告: '二重' 内部{} [-Wnarrowing] CONSTダブル& INTREFに 'INT' から 'ミント' の変換を狭く{ myint};

[1]

int main(){  
    int myint{10}; 
    cout<<"myint: "<<myint<<endl; 

    const double &intref{myint}; 
    cout<<"intref: "<<intref<<endl; 
} 
+5

これはおそらく奇妙ではないでしょうか? –

+4

'intのアドレスをdoubleに設定したい'リファレンスはアドレスではありません。それがあったとしても、なぜあなたはこれを望んでいるのですか?前記アドレスを逆参照しようとすると、言語のエイリアシング規則が破られ、したがって未定義の動作が引き起こされる。そして何のために?あなたは何をしようとしているのですか?これはほとんど確かにX/Yの質問です。つまり、「どのように私は具体的なことをするのですか?」と尋ねるのではなく、その質問をするために導いた一般的なものが何であるか教えてください。ここで何をしようとしていても、より良い解決策が絶対に必要です。 –

+0

...もしあなたが文字通り 'int *'アドレスの数値表現をキャストして 'double'変数に格納したいのであれば、それは複数の理由から有効な変換でもありません。この質問の解釈は、意味をなさないか、または人々に回答するための有益な基礎を与えるものではありません。あなたは本当にあなたのモチベーションを正しく説明するために書き直す必要があります。 –

答えて

0

double&二重に参照しなければならない、とmyintは二重ではありません。あなたは実際に一時的なダブルを構築しており、一時的にconst double&を構築しています。

+0

私の問題は、int型とdouble型の参照のベクトルを作成したいが、ベクトルは1つの型しか正しく格納できないということですか?だから、私はintを二重に入れようとします...そして、それが安全かどうか疑問です。 – cabe

+2

@cabeコンテナには参照を含めることはできません。可能な複数の型の値を格納したい場合、 'variant'、' any'などのGoogleはC++ 17に到着し、それまでBoostライブラリから取得しています。 –

関連する問題