第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么列表初始化(使用大括號(hào))比其他方法更好?

為什么列表初始化(使用大括號(hào))比其他方法更好?

C++
慕勒3428872 2019-06-28 15:35:55
為什么列表初始化(使用大括號(hào))比其他方法更好?MyClass a1 {a};     // clearer and less error-prone than the other threeMyClass a2 = {a};MyClass a3 = a;MyClass a4(a);為什么?我找不到答案,所以讓我回答我自己的問(wèn)題。
查看完整描述

3 回答

?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊

基本上是從Bjarne Stroustrup那里復(fù)制和粘貼的C+編程語(yǔ)言第4版:

列表初始化不允許縮小范圍(§iso.8.5.4)。即:

  • 一個(gè)整數(shù)不能轉(zhuǎn)換為另一個(gè)不能保存其值的整數(shù)。例如,char to int是允許的,而不是int to char。
  • 浮點(diǎn)值不能轉(zhuǎn)換為另一種不能保存其值的浮點(diǎn)類型.例如,允許浮動(dòng)到雙倍,但不允許雙倍浮動(dòng)。
  • 浮點(diǎn)值不能轉(zhuǎn)換為整數(shù)類型.
  • 整數(shù)值不能轉(zhuǎn)換為浮點(diǎn)類型.

例子:

void fun(double val, int val2) {

    int x2 = val; // if val==7.9, x2 becomes 7 (bad)

    char c2 = val2; // if val2==1025, c2 becomes 1 (bad)

    int x3 {val}; // error: possible truncation (good)

    char c3 {val2}; // error: possible narrowing (good)

    char c4 {24}; // OK: 24 can be represented exactly as a char (good)

    char c5 {264}; // error (assuming 8-bit chars): 264 cannot be 
                   // represented as a char (good)

    int x4 {2.0}; // error: no double to int value conversion (good)}

這個(gè)使用時(shí),=優(yōu)于{}的情況auto關(guān)鍵字,以獲取由初始化器確定的類型。

例子:

auto z1 {99}; // z1 is an initializer_list<int>auto z2 = 99; // z2 is an int

結(jié)語(yǔ)

喜歡{}初始化而不是其他選項(xiàng),除非您有很強(qiáng)的理由不這樣做。


查看完整回答
反對(duì) 回復(fù) 2019-06-28
?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

使用大括號(hào)初始化有很多原因,但是您應(yīng)該知道這個(gè)initializer_list<>構(gòu)造函數(shù)優(yōu)于其他構(gòu)造函數(shù)。,異常是默認(rèn)構(gòu)造函數(shù)。這將導(dǎo)致構(gòu)造函數(shù)和模板出現(xiàn)問(wèn)題,其中類型T構(gòu)造函數(shù)可以是初始化程序列表,也可以是普通的舊ctor。

struct Foo {
    Foo() {}

    Foo(std::initializer_list<Foo>) {
        std::cout << "initializer list" << std::endl;
    }

    Foo(const Foo&) {
        std::cout << "copy ctor" << std::endl;
    }};int main() {
    Foo a;
    Foo b(a); // copy ctor
    Foo c{a}; // copy ctor (init. list element) + initializer list!!!}

假設(shè)您沒(méi)有遇到這樣的類,那么就沒(méi)有什么理由不使用減縮器列表了。


查看完整回答
反對(duì) 回復(fù) 2019-06-28
?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊

關(guān)于使用列表初始化的優(yōu)點(diǎn),已經(jīng)有了很好的答案,但是我個(gè)人的經(jīng)驗(yàn)法則不是盡可能使用大括號(hào),而是讓它依賴于概念意義:

  • 如果我正在創(chuàng)建的對(duì)象在概念上持有我在構(gòu)造函數(shù)中傳遞的值(例如容器、POD結(jié)構(gòu)、Atomics、智能指針等),那么我將使用大括號(hào)。
  • 如果構(gòu)造函數(shù)類似于普通函數(shù)調(diào)用(它執(zhí)行一些或多或少由參數(shù)化的復(fù)雜操作),那么我將使用普通函數(shù)調(diào)用語(yǔ)法。
  • 對(duì)于默認(rèn)初始化,我總是使用大括號(hào)。


    首先,我總是確信對(duì)象是初始化的,而不管它是一個(gè)“真實(shí)的”類,它有一個(gè)默認(rèn)的構(gòu)造函數(shù),它無(wú)論如何都會(huì)被調(diào)用,或者是內(nèi)置/POD類型。其次,在大多數(shù)情況下,它與第一條規(guī)則一致,因?yàn)槟J(rèn)的初始化對(duì)象通常表示“空”對(duì)象。

在我的經(jīng)驗(yàn)中,與默認(rèn)情況下使用大括號(hào)相比,可以更一致地應(yīng)用此規(guī)則集,但當(dāng)所有異常不能被使用或具有與帶括號(hào)的“正?!焙瘮?shù)調(diào)用語(yǔ)法不同的含義時(shí),必須顯式地記住它們(調(diào)用不同的重載)。

例如,它與標(biāo)準(zhǔn)庫(kù)類型(如std::vector:

vector<int> a{10,20};   //Curly braces -> fills the vector with the argumentsvector<int> b(10,20);   //Parenthesis -> uses arguments to parametrize some functionality,                          vector<int> c(it1,it2); //like filling the vector with 10 integers or copying a range.vector<int> d{};      //empty braces -> default constructs vector, which is equivalent
                      //to a vector that is filled with zero elements


查看完整回答
反對(duì) 回復(fù) 2019-06-28
  • 3 回答
  • 0 關(guān)注
  • 779 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)