C++關於變量初始化的瑣記

#include <iostream>
using namespace std;

class Base{
    virtual void func1()
    {
        cout<<"func1 called"<<endl;
    }
};

class Derived:public Base{

};

int main(int argc, char *argv[])
{
    auto bp = new Base();
    if(Derived *dp = dynamic_cast<Derived *>(bp)){
      //使用dp指向的Derived對象
        cout<<"branch1 dp="<<dp<<"bp"<<bp<<endl;
    }
    else{
      //使用bp指向的Base對象
        cout<<"branch2 dp="<<dp<<"bp"<<bp<<endl;
    }

    ClassP<string>::pFunc f([](string data){
        cout<<"x:"<<data<<endl;
    });
}

上面這種用dynamic_cast轉換指針的寫法能夠在運行時判斷被轉換的對象是否能轉換 不能轉換會返回一個nulljava

而後這裏的變量初始化也是能夠像賦值同樣返回被賦予的值做爲if的判斷依據 這樣就造成了這種簡單的連續寫法ios

 

然而變量初始化和變量賦值仍是有區別的,目前常常遇到的問題是在循環內部。若是在循環內部初始化一個變量 這個初始化語句只會設定一次變量值 後幾回循環會略過這一條初始化。這是C++和java,c#的一個很大區別,常常形成坑。java和c#都是在循環內部初始化變量也會每次循環都設定值的。c#

相關文章
相關標籤/搜索