auto
を使用してポインタ型を推測すると、私は奇妙な現象を発見しました。私のコードは次のようである:C++でのautoの使用11
#include <iostream>
using namespace std;
int main()
{
int i = 100;
auto p1 = &i;
auto *p2 = &i;
cout << *p1 << " " << *p2 << endl;
return 0;
}
コンパイルして実行した後、我々は*p1
と*p2
の結果が同じであることを見つけることができ、両方これはp1
とp2
の両方int
を指すポインタ・オブジェクトであることを意味100オブジェクト。
[[email protected] ~]$ ./test
100 100
p1
とp2
を定義し、これらの二つの文の間に違いはありますか? template argument deductionで使用される変数の宣言に使用
もちろん、他に何が起こる可能性がありますか? p1とp2が両方のポインタでない場合、それらを '&i'で初期化できませんでした。'p2'がポインター型の変数であることを明確にするために、' auto * p2'ではなく 'auto * p2'という言葉で書くべきではないかと思うかもしれませんが、ポインティングされた型はコンパイラーによって自動的に演繹されます。 –
'auto * p2 = init()'は生ポインタ型を強制します。例えば、いつも 'init()'が 'shared_ptr'を返すようにリファクタリングされ、この値をコピーしてメモリに保存する代わりに、コンパイルエラーが発生し、 'shared_ptr '、 'weak_ptr '、または' T& '。 –
jingyu9575
これは、 'auto'が魔法であり、潜在的に混乱する理由です。 –