2016-04-19 8 views
9

中に狭く防ぐために、中括弧を使用して変数も?C++:私は<em>が</em>変数を初期化するときの狭窄を防ぐために、中括弧/初期化子リストを使用して精通んだけど、<em>が</em>値を割り当てる際にそれを使用することをお勧めし割り当て

int i{1};  // initialize i to 1 
double d{2.0}; // initialize d to 2.0 
i = {2};  // assign value 2 to i 
i = {d};  // error: narrowing from double to int 

割り当てに中括弧を使用しない理由はありますか?

+5

狭くしたい場合は? – xaxxon

+0

私はこう言っています:割り当てにそれらを使わないでください – Exceptyon

+0

https://herbsutter.com/2013/05/09/gotw-1-solution/とおそらくhttps://herbsutter.com/2013/を読んでください08/12/gotw-94-solution-aaa-style-almost-always-auto / –

答えて

2

初期化と割り当ての問題はありません。

さまざまなタイプの問題です。

変数をdoubleに初期化しようとすると、同じエラーが発生します。

{d}に別のdouble変数を割り当てることができます。

int main() 
{ 
    int i{1};  // initialize i to 1 
    //int i2{3.0}; // ERROR! 
    double d{2.0}; // initialize d to 2.0 
    double d2{1.0}; // initialize d2 to 1.0 
    i = {2};  // assign value 2 to i 
    //i = {d};  // error: narrowing from double to int 
    d2 = {d};  // OK 

    return 0; 
} 

あなたの例文は豊富です。

値を割り当てるときの良い方法はありますか? 正確性を失わないようにしたい場合は、指定できます。

例:あなたは、あなたが狭小化問題ではありません(とき)がいる場合

// i is of type int 
assign(i, 23); // OK 
assign(i, 11.2); // ERROR! 

を狭めないようにしていますこのように

template <typename X, typename Y> 
void assign (X & x, Y const & y) 
{ x = {y}; } 

をテンプレートassign()関数を記述することができます中括弧を避けることができます。

関連する問題