1樓:匿名使用者
在c++裡怎麼能知道一個變數的具體型別,
答:1。執行時獲知變數型別名稱,可以使用 typeid(變數).
name,需要注意不是所有編譯器都輸出"int"、"float"等之類的名稱,對於這類的編譯器可以這樣使用:float f = 1.1f; if( typeid(f) == typeid(0.
0f) ) ……
2。對於多型類例項,想得到實際的類名稱,需要使用到rtti,這需要在編譯的時候加上引數"/gr"。
3。對於普通變數,既然是自己寫的,那當然也就應該知道它的型別,其實用不著執行時獲知;對於多型類例項,既然需要執行時獲知實際型別,那麼就說明這裡不具有多型性,既然沒有多型性就不應該抽象它,這屬於設計錯誤,總之,我認為rtti是多餘的。
4。對於多型類例項,使用 typeid(value) == typeid(value)來判斷,不如使用 dynamic_cast 來判斷,它們的原理是一樣的。
2樓:匿名使用者
typeid(test).name() is int [80]typeid(test[0]).name() is inttypeid(myclass a).
name() is class myclass
typeid(myclass2b).name() is class myclass2
typeid(int i).name() is int請按任意鍵繼續. . .
【c、c++】關於型別轉換和typeid的問題
3樓:匿名使用者
const std::type_info &info = typeid( double_type_var);
char*type= info.name();
if(strcmp(type,"double"))型別不確定用dynamic_cast
object_of_target_type* ptr = dynamic_cast(pointer_expression);
4樓:匿名使用者
typeid是執行時型別識別,獲取的型別是無法進行轉化的...
c++迴圈語句輸出問題
5樓:白軒
差書,慢慢摸索,不著急,慢慢來
6樓:安遠城主
把 for 迴圈裡的 break; 行註釋掉
關於c 語句auto midreturn v beginv size2是什麼意思在這裡的作用是什麼
這是c 11的lambda表示式,用來定義匿名函式。在這 中,auto mid 等價於定義了函式mid,其引數個數為0個,表示直接引用外部變數,函式體是 return v.begin v.size 2 具體詳見c lambda表示式 c語言和c 語言的區別是什麼?c語言與c 的區別有很多 1,全新的...
關於C語言的一道題迴圈語句,C語言迴圈語句裡的一道例題
a.for x i 因為沒有判斷語句,所以就沒有真假判斷,程式就一直迴圈下去咯。b.while 1 因為括弧裡面是1,在邏輯上說就是真,所以迴圈也會繼續。c.for i 10 i sum i 和a一樣,沒有判斷語句。答案是d就不用說了吧。a c缺少終止條件語句,當然死迴圈 b,while 1 1表示...
c語言有定義語句,C語言 有定義語句char a int b float c double d
首先,在c中,資料之間的運算必須是同型別的才能進行運算。如果型別不一致,就必須先轉換成相同的型別 由低級別 高階別轉換。資料型別級別由低到高分別為 char int float double。轉換時由低級別向高階別轉換。本題中,資料型別分別為 char型 int型 float型和double型。按照...