Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

typeof

From Wikipedia, the free encyclopedia

typeof, alternately alsotypeOf, andTypeOf, is anoperator provided by severalprogramming languages to determine thedata type of avariable. This is useful when constructing programs that must accept multiple types of data without explicitly specifying the type.

In languages that supportpolymorphism andtype casting, the typeof operator may have one of two distinct meanings when applied to anobject. In some languages, such asVisual Basic,[1] the typeof operator returns thedynamic type of the object. That is, it returns the true, original type of the object, irrespective of any type casting. In these languages, the typeof operator is the method for obtainingrun-time type information.

In other languages, such asC#[2] orD[3] and, in C (as ofC23),[4][5] the typeof operator returns thestatic type of the operand. That is, it evaluates to the declared type at that instant in the program, irrespective of its original form. These languages usually have other constructs for obtaining run-time type information, such astypeid.

Examples

[edit]

C

[edit]

As ofC23typeof is a part of the C standard. The operatortypeof_unqual was also added which is the same astypeof, except it removes cvr-qualification and atomic qualification (differentiating it fromdecltype in C++).[6][7]

In a non-standard (GNU) extension of theC programming language,typeof may be used to define a general macro for determining the maximum value of two parameters:

#define max(a, b) ({ \    typeof (a) _a = (a); \    typeof (b) _b = (b); \    _a > _b ? _a : _b; \})

C++

[edit]
Main article:decltype

InC++, while there is notypeof operator, there is adecltype operator, which can be used to represent the type of a variable. Although C23 addedtypeof, it does not exist in C++. C++ also has atypeid operator to get type information.

structDouble{doublevalue;}constDouble*d;// decltype can be used in type declarationsdecltype(d->value)y;// equivalent to double y;// decltype can be used in trailing return types// This may be necessary for overloaded operators where, for instance,// type T + type U may result in type V distinct from T and Utemplate<typenameT,typenameU>autoadd(Tt,Uu)->decltype(t+u){returnt+u;}

C#

[edit]

InC#:

// Given an object, returns if it is an integer.// The "is" operator can be also used to determine this.publicstaticboolIsInteger(objecto){returno.GetType()==typeof(int);}

Java

[edit]

Java does not have a keyword equivalent totypeof. All objects can useObject'sgetClass() method to return their class, which is always an instance of theClass class. All types can be explicitly named by appending ".class", even if they are not considered classes, for exampleint.class andString[].class. There is also theinstanceof operator fortype introspection which takes an instance and a class name, and returns true for all subclasses of the given class.

Strings="Hello, world!";Class<?>sClass=s.getClass();Class<String>stringClass=String.class;Class<Integer>intClass=int.class;Objectobj=/* something here */;System.out.printf("The class of %s is %s%n",obj,obj.getClass().getName());

JavaScript

[edit]

InJavaScript:

functionisNumber(n){returntypeofn==='number';}

TypeScript

[edit]

InTypeScript:[8]

functionsomeFunction(param:typeofexistingObject):void{// ...}
letnewObject:typeofexistingObject;

Python

[edit]

Python has the built-in functiontype.[9]

print(type(123))# prints: <class 'int'>

VB.NET

[edit]

InVB.NET, the C# variant of "typeof" should be translated into the VB.NET'sGetType method. TheTypeOf keyword in VB.NET is used to compare an object reference variable to a data type.

The following example usesTypeOf...Is expressions to test the type compatibility of two object reference variables with various data types.

DimrefIntegerAsObject=2MsgBox("TypeOf Object[Integer] Is Integer? "&TypeOfrefIntegerIsInteger)MsgBox("TypeOf Object[Integer] Is Double? "&TypeOfrefIntegerIsDouble)DimrefFormAsObject=NewSystem.Windows.Forms.FormMsgBox("TypeOf Object[Form] Is Form? "&TypeOfrefFormIsSystem.Windows.Forms.Form)MsgBox("TypeOf Object[Form] Is Label? "&TypeOfrefFormIsSystem.Windows.Forms.Label)MsgBox("TypeOf Object[Form] Is Control? "&TypeOfrefFormIsSystem.Windows.Forms.Control)MsgBox("TypeOf Object[Form] Is IComponent? "&TypeOfrefFormIsSystem.ComponentModel.IComponent)

See also

[edit]

References

[edit]
  1. ^"TypeOf Operator (Visual Basic)".MSDN. Archived fromthe original on Nov 28, 2016.
  2. ^"typeof (C#)".MSDN. Archived fromthe original on Sep 10, 2016.
  3. ^"Declarations - D Programming Language 1.0".Digital Mars. Dec 30, 2012.Archived from the original on Oct 7, 2023.
  4. ^"Typeof" in "Using the GNU Compiler Collection".
  5. ^Meneide, JeanHeyd (2021-03-07)."Not-So-Magic - typeof(…) in C | r2".Open Standards. Retrieved2021-12-02.
  6. ^"N2927: Not-so-magic - typeof for C".Open Standards. 2022-02-02.Archived from the original on Dec 1, 2023.
  7. ^"Consider renaming remove_quals"(PDF).Open Standards. 2022-02-06.Archived(PDF) from the original on Feb 17, 2024.
  8. ^"Using 'typeof' to infer a type".Learn TypeScript. Retrieved2022-01-28.
  9. ^"Built-in Functions".Python documentation. Retrieved20 June 2025.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Typeof&oldid=1332410625"
Category:

[8]ページ先頭

©2009-2026 Movatter.jp