#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#