typeid如何得出變數的型別?

時間 2021-05-31 13:12:09

1樓:叛逆者

這裡的typeid是乙個操作符,不是函式。所以和sizeof一樣,是編譯期就確定的。同時,typeid和sizeof另乙個共同點是,接收的與其說是乙個變數,不如說是乙個型別。

typeid(int)也行。

2樓:RednaxelaFX

題主先好好理解一下C++的typeid運算子到底是什麼意思,再問「原理是什麼」會比較好。

先看這裡學習typeid是什麼意思:typeid operator

針對題主給的例子:

inti=1

;const

char

*name

=typeid(i

).name

();這裡的typeid(i)根本不需要做任何執行時動作,而是純編譯時行為——它使用變數i的靜態型別直接就知道這是對int型別做typeid運算,於是可以直接找出int對應的std::type_info物件返回出來。

If expression is not a glvalue expression of polymorphic type,typeid does not evaluate the expression, and the std::type_info object it identifies represents the static type of the expression. Lvalue-to-rvalue, array-to-pointer, or function-to-pointer conversions are not performed.

可以看到Clang++在LP64上用的vtable布局,不禁用RTTI時,在-8偏移量上的slot就是存typeinfo指標的。

javascript中,基本型別的變數的賦值語句會在記憶體中產生兩個副本嗎?

唐靜鑫 JS的基本型別是存在棧中的,而且每個基本型別都是單獨儲存在記憶體的不同位址中。所以在日常的開發中,你會發現基本型別的賦值並不會相互影響。 賀師俊 只要保證符合 ECMAScript 規範規定的語義,記憶體裡是幾份是無所謂的。而且就算是兩份,通常你也看不出來。在現代JS引擎中,對字串有各種優化...

強制型別轉換是否改變變數的位元表示?

Shiwei Wang 嚴格來說,要輸出unsigned short int,format應該是 hd RednaxelaFX 有時候C的cast是會讓bit value發生變化的,例如整型與浮點型之間的轉換。inti floatf float i bitpattern changes 此時要想保持...

怎樣解析出C原始檔中的變數的型別?

haoshu zhao 編譯一下就比較好得到了。Is there a way to print out the type of a variable pointer in C?這裡面提到的方法有 編譯之後用GDB看型別 用不正確的格式列印 printf d variable 然後編譯 gcc Wal...