c++11でポインタの'auto'型代入は'*'を必要としますか?
質問
変数がポインタである場合、それを "auto" 型の変数に代入する場合、 "*" を指定するのでしょうか。
std::vector<MyClass> *getVector(); //returns populated vector
//...
std::vector<MyClass> *myvector = getVector(); //assume has n items in it
auto newvar1 = myvector;
// vs:
auto *newvar2 = myvector;
//goal is to behave like this assignment:
std::vector<MyClass> *newvar3 = getVector();
私は、この
auto
がc++11でどのように動作するのか、少し混乱しています(これはc++11の新機能ですよね)。
更新しました。 私は、私のベクトルが実際に関数に入力され、私はちょうど変数に返されたポインタを代入しようとしている方法をより明確にするために、上記を修正しました。 混乱させて申し訳ありません。
どのように解決するのですか?
auto newvar1 = myvector;
// vs:
auto *newvar2 = myvector;
どちらも同じで、ポインタを宣言して
std::vector<MyClass>
へのポインタを宣言します (ランダムな場所を指すので
. というわけで、基本的にはどれを使ってもいいのです。私なら
myvector
は初期化されておらず、ゴミが含まれている可能性が高いため)
auto var = getVector()
を選びますが
auto* var = getVector()
にすることもできます。
var
がポインタであること)をより強調すると考えるなら
を使用して同様の不確実性があるとは夢にも思わなかったと言わざるを得ません。
auto
. 私は、人々は単に
auto
を使うだけで、それについて考えることはないだろうと思っていました。
auto
を何かで飾る必要があるのは、リファレンスやcv-qualifiersのときだけです。
しかし、そこに は を少し修正すると、両者の間にわずかな差が生じます。
auto newvar1 = myvector, newvar2 = something;
この場合
newvar2
はポインタになります(そして、何かがそうでなければなりません)。
auto *newvar1 = myvector, newvar2 = something;
ここで
newvar2
はポインティ型、例えば
std::vector<MyClass>
であり、イニシャライザは適切でなければなりません。
一般に、イニシャライザーが中括弧付きのイニシャライザーリストでない場合、コンパイラはそのイニシャライザーを処理します。
auto
をこのように処理します。
-
これは、宣言子の正確な形をした1つの引数を持つ人工的な関数テンプレートの宣言を生成します。
auto
がテンプレートパラメータに置き換わります。ですからauto* x = ...
にはtemplate <class T> void foo(T*);
-
呼び出しを解決しようとする
foo(initializer)
に対して推論されるものを調べます。T
. これはauto
. -
一つの宣言の中に複数の宣言子がある場合、それら全てに対して行われる。このとき、推論された
T
はすべて同じでなければなりません。
関連
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] 型付けされた関数ポインタ?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
-
[解決済み] 関数からunique_ptrを返す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?