2016-07-10 11 views
-1
const int i = 42; 
const auto &k = i; 

kconstはすでにautoの前に指定されているため)const int&か、単にintすべきですか?constをautoとともに使用するときの参照(またはポインタ)のタイプは何ですか?

注:だから、kはタイプ「のconst int型の明確である

error: cannot assign to variable 'k' with const-qualified type 'const int &' 

&: cout << "k is " << typeid(k).name() << endl;プリントi

+0

'k'は、' i'を参照する 'const int&'の型になります。 '&i'と'&k'を比較することで、[確認しやすい](http://rextester.com/XCXP29391)。 –

+0

@IgorTandetnikの場合、なぜそれがちょうどiであるのか、余分なconst(autoの前)がこの場合にどのように動作するのかを示すtypeid(k).name 、 ご協力いただきありがとうございます ! –

+0

'const'は何もしません - 結果はそれなしで同じになります。 'const'では、' auto'は 'int'、' k'は 'const int&'です。 'const'がなければ、' auto'は 'const int'として推論され、' k'は 'const int&'になります。 'typeid'は式の型を取得します - 式' k'は 'int'型の左辺値です(参照型を持つ式のようなものはありません)。 –

答えて

1

私はこの

const int i = 42; 
const auto &k = i; 

k = 21; 

のようなコードを継続し、エラーメッセージが表示されます'明らかに、typeidは穴のタイプを捕捉することができません。もちろんコンパイラはあります。

0

2種類が同じかどうか不明な場合は、いつでもstd::is_sameを使用して確認できます。

#include <iostream> 
#include <type_traits> 

int main() { 
    const int i = 42; 
    const auto &k = i; 

    std::cout << std::boolalpha 
       << std::is_same<decltype(i), std::remove_reference<decltype(k)>::type>::value << std::endl; 
} 
関連する問題