MSDN上typeof的说明:“用于获取类型的 System.Type 对象。”
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比沂水网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式沂水网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖沂水地区。费用合理售后完善,十年实体公司更值得信赖。
typeof是操作符(一些书叫运算符),这点很重要。在C#中所有的操作符最后都变为函数了。这也就不奇怪为什么一个看似函数的东西却被称为操作符的原因了。
注意返回的是Type对象,内含有许多信息。如类型的信息。方法有哪些,属性有哪些,字段有哪些。如果用其它的技术,如反射、序列化什么的,配合使用的话会更方便。
扩展资料
typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称。
GetType()方法继承于Object(C#中所有类的基类都是object类。基类是相对于派生类而言的,比方说:如果B类继承自A类,则A就是B的基类。),所以C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型。
举例说明:
有这样一个变量i: Int32 i = new Int32();
i.GetType()返回值是Int32的类型,但是无法使用typeof(i),因为i是一个变量。如果要使用typeof(),则只能:typeof(Int32),返回的同样是Int32的类型。
Typeof()是运算符,用于获取类型的 System.Type 对象。而GetType是方法,获取当前实例的类型;Typeof()的参数只能是int,string,String,自定义类型,且不能是实例;
1. container_of是Linux内核中实现的宏,不是C语言的标准函数。不能跨平台。
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)-member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
2. typeof是GNU C的扩展,不是ISO标准中的函数。用gcc编译可以跨平台。
3. offsetof是C语言标准库中的宏,定义在头文件stddef.h中。可以跨平台。
typeof是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。 扩展资料
typeof的.返回值
typeof运算符的返回类型为字符串,值包括如下几种:
1. 'undefined' --未定义的变量或值
2. 'boolean' -布尔类型的变量或值
3. 'string' --字符串类型的变量或值
4. 'number' --数字类型的变量或值
5. 'object' --对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理)
6. 'function' --函数类型的变量或值
typeof关键字是C语言中的一个新扩展。只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别: 声明 函数声明符中的参数类型链表和返回类型 类型定义 类型操作符s sizeof操作符 复合文字 typeof实参 编译器接受带双下划线的关键字:__typeof和__typeof__。本文中的例子并没有遵循使用双下划线的惯例。从语句构成上看,typeof关键字后带圆括号,其中包含类型或表达式的名称。这类似于sizeof关键字接受的操作数(与sizeof不同的是,位字段允许作为typeof实参,并被解释为相应的整数类型)。从语义上看,typeof 关键字将用做类型名(typedef名称)并指定类型。 使用typeof的声明示例 下面是两个等效声明,用于声明int类型的变量a。 typeof(int) a; /* Specifies variable a which is of the type int */ typeof('b') a; /* The same. typeof argument is an expression consisting of character constant which has the type int */以下示例用于声明指针和数组。为了进行对比,还给出了不带typeof的等效声明。 typeof(int *) p1, p2; /* Declares two int pointers p1, p2 */int *p1, *p2;typeof(int) * p3, p4;/* Declares int pointer p3 and int p4 */int * p3, p4;typeof(int [10]) a1, a2;/* Declares two arrays of integers */int a1[10], a2[10];如果将typeof用于表达式,则该表达式不会执行。只会得到该表达式的类型。以下示例声明了int类型的var变量,因为表达式foo()是int类型的。由于表达式不会被执行,所以不会调用foo函数。 extern int foo();typeof(foo()) var;使用typeof的声明限制 请注意,typeof构造中的类型名不能包含存储类说明符,如extern或static。不过允许包含类型限定符,如const或volatile。例如,下列代码是无效的,因为它在typeof构造中声明了extern: typeof(extern int) a;下列代码使用外部链接来声明标识符b是有效的,表示一个int类型的对象。下一个声明也是有效的,它声明了一个使用const限定符的char类型指针,表示指针p不能被修改。 extern typeof(int) b;typeof(char * const) p = "a";在宏声明中使用typeof typeof构造的主要应用是用在宏定义中。可以使用typeof关键字来引用宏参数的类型。因此,在没有将类型名明确指定为宏实参的情况下,构造带有所需类型的对象是可能的。
typedef还是typeof?
typedef用来定义类型别名,c/c++里都有,属于语言的一个特性,和mfc无关
比如
typedef int* intptr;
intptr a; // 相当于int* a;
typeof,我所知道的是gcc中对c/c++语法的一个扩展,用来静态获取参数类型
比如
int a = 3;
typeof(a) b = 4; // 相当于 int b = 4;
typeof("12345") c = "abcde"; // 相当于 const char c[6] = "abcde"
vectortypeof(1.234) a; // 相当于 vectordouble a;
不知道你是不是说这个
//////////////ebs.ca
typeid用来在运行时获取类型信息,常用来down cast,就是你给的代码
不过这种情况下一般用dynamic_cast