精华内容
下载资源
问答
  • 类型别名

    2019-04-18 17:18:59
    两种定义类型别名的方法:typedef和using。 typedef int mint; using nint = int; 有类型别名时,解释变量类型需小心。直接类型别名替换会导致错误。 typedef int *mint; // mint是 int*的别名 int a = 1; ...

    两种定义类型别名的方法:typedefusing

    typedef int mint;
    using nint = int;

    有类型别名时,解释变量类型需小心。直接类型别名替换会导致错误。

    typedef int *mint;    // mint是 int*的别名
    int a = 1;
    const mint pa = &a;
    const int *pb = &a;    // pa和pb类型并不相同

    对于上面的语句,pa的定义如果按照别名展开,将解释为pb的类型。实际上pa是一个指向int型数据的常量指针,即pa本身是一个常量,所指对象为int型。而pb是一个指向常量对象的指针。

    展开全文
  • Golang 之区分类型别名与类型定义

    万次阅读 2019-07-06 17:12:14
    Golang 之区分类型别名(Type Alias)与类型定义(Type define)一、类型别名(Type Alias)、类型定义是什么?二、区分类型别名与类型定义类型定义 类型别名 类型定义 区分类型别名、类型定义 非本地类型不能...

    Golang 之区分类型别名(Type Alias)与类型定义(Type define)

    • 类型别名
    • 类型定义
    • 区分类型别名、类型定义
    • 非本地类型不能定义方法

    一、类型别名(Type Alias)、类型定义是什么?

    类型别名 是 Go 1.9 版本添加的新功能。主要应用于代码升级、工程重构、迁移中类型的兼容性问题。C/C++ 语言中,代码的重构升级可以使用宏快速定义新的代码。Go 语言中并未选择通过宏,而是选择通过类型别名解决重构中最复杂的类型名变更问题。

    在 Go 1.9 版本之前内建类型定义的代码如下:
      type byte uint8
      type rune int32
    
    在Go 1.9 版本之后内建类型定义的代码如下:
      type byte = uint8
      type rune = int32
    
    通过以上可以看出这个修改就是配合类型别名进行修改的。

    二、区分类型别名与类型定义

    类型别名规定:Type Alias只是Type 的别名,本质上Type Alias 与Type是同一个类型,即基本数据类型是一致的。好比如我们小时家里人给我们起的小名,上学后英语老师给起的英文名字,但是这个名字都是指的我们自己。
    表面上看类型别名与类型定义只有一个等号的差异("="),实际上的差异我们通过一段简短的代码更为深刻的理解二者之间的差异,如下代码所示;
    package main
    
    import "fmt"
    
    // 自定义类型myInt,基本类型是int
    type myInt int
    
    //将 int 类型取一个别名intAlias
    type intAlias = int
    
    func main() {
    	//声明 a变量为自定义 myInt 类型
    	var a myInt
    	// 输出 a 的类型 和默认值
    	fmt.Printf("a Type: %T, value: %d\n", a, a)
    
    	//声明 b变量为 intAlias 类型
    	var b intAlias
    	// 输出 b 的类型 和默认值
    	fmt.Printf("b Type: %T, value: %d\n", b, b)
    }
    
    == 输出结果 ==:
    a Type: main.myInt, value: 0
    b Type: int, value: 0
    
    • 从上面的结果我们可以看出,a 的类型是 main.myInt,表示main 包下定义的myInt 类型。生成了新的数据类型。
    • b 的类型是 int 。intAlias 类型只会在代码中存在,编译完成时,不会有 intAlias 类型。

    类型定义

    类型定义:依据基本类型声明一个新的数据类型。

    	// 新声明一个变量c intAlias 类型
    	var c intAlias
    	c = a
    	fmt.Printf("c Type: %T, value: %d\n", c, c)
    	
    OutPut Result:
     cannot use a (type myInt) as type int in assignment
    

    从以上可以看出,变量 a 和 c 不是同一个类型,因此不能直接赋值;可以通过强制类型转换,实现 修改为 c=int(a)

    展开全文
  • 类型别名和类型定义

    2021-04-08 23:31:53
    类型别名和原类型完全一样,只不过是另一种叫法而已 完全一样(identical types)意味着这两种类型的数据可以互相赋值,而类型定义要和原始类型赋值的时候需要类型转换(Conversion T(x))。 下面这个例子中,v是整数...

    记住下面一句话:
    类型别名和原类型完全一样,只不过是另一种叫法而已

    完全一样(identical types)意味着这两种类型的数据可以互相赋值,而类型定义要和原始类型赋值的时候需要类型转换(Conversion T(x))。

    下面这个例子中,v是整数类型,可以直接赋值给d,因为d的类型是D,是是整数的别名。而var i I = v这一句会出错,因为I和整数是两个类型
    所以类型别名和类型定义最大的区别在于:
    • 类型别名和原类型是相同的,
    • 而类型定义和原类型是不同的两个类型。

    package main
    type D = int
    type I int
    func main() {
    	v := 100
    	var d D = v
    	var i I = v
    }
    

    如果上面的还没有看明白,下面的应该就很直白了,类型定义说到底就是为了,分类更加方便,更直白一点说就是让代码看起来更容易些
    为了说明类型声明,我们将不同温度单位分别定义为不同的类型:

    package tempconv
    import "fmt"
    type Celsius float64 // 摄氏温度
    type Fahrenheit float64 // 华氏温度
    const (
        AbsoluteZeroC Celsius = -273.15 // 绝对零度
        FreezingC Celsius = 0 // 结冰点温度
        BoilingC Celsius = 100 // 沸水温度
    )
    func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }
    func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }
    

    我们在这个包声明了两种类型:
    Celsius和Fahrenheit分别对应不同的温度单位。
    它们虽然有着相同的底层类型float64,但是它们是不同的数据类型,因此它们不可以被相互比较或混在一个表达式运算。刻意区分类型,可以避免一些像无意中使用不同单位的温度混合计算导致错误;

    因此需要一个类似Celsius(t)或Fahrenheit(t)形式的显式转型操作才能将float64转为对应的类型。Celsius(t)和Fahrenheit(t)是类型转换操作,它们并不是函数调用。类型转换不改变值本身,但是会使它们的语义发生变化。另一方面,CToF和FToC两个函数则是对不同温度单位下的温度进行换算,它们会返回不同的值。

    底层数据类型决定了内部结构和表达方式,也决定是否可以像底层类型一样对内置运算符的支持。这意味着,Celsius和Fahrenheit类型的算术运算行为和底层的float64类型是一样的,正如我们所期望的那样。

    fmt.Printf("%g\n", BoilingC-FreezingC) // "100" °C
    boilingF := CToF(BoilingC)
    fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // "180" °F
    fmt.Printf("%g\n", boilingF-FreezingC) // compile error: type mismatch
    

    比较运算符 == 和 < 也可以用来比较一个命名类型的变量和另一个有相同类型的变量,或有着相同底层类型的未命名类型的值之间做比较。但是如果两个值有着不同的类型,则不能直接进行比较:

    var c Celsius
    var f Fahrenheit
    fmt.Println(c == 0) // "true"
    fmt.Println(f >= 0) // "true"
    fmt.Println(c == f) // compile error: type mismatch
    fmt.Println(c == Celsius(f)) // "true"!
    

    注意最后那个语句。尽管看起来想函数调用,但是Celsius(f)是类型转换操作,它并不会改变值,仅仅是改变值的类型而已。测试为真的原因是因为c和g都是零值。

    参考:
    https://www.jianshu.com/p/a02cf41c0520
    https://www.cnblogs.com/sparkdev/p/10761825.html

    展开全文
  • 2.1.9 类型别名

    2021-02-08 20:59:27
    文章目录*类型别名* 类型别名 C++为类型建立别名的方式有两种。 一种是使用预处理器 #define BYTE char 这样,预处理器将在编译程序时用char替换所有的BYTE,从而使BYTE成为char的别名。 第二种方法是使用C++...

    大纲目录

    文章目录


    类型别名

    C++为类型建立别名的方式有两种。

    • 一种是使用预处理器

      #define BYTE char
      

      这样,预处理器将在编译程序时用char替换所有的BYTE,从而使BYTE成为char的别名。

    • 第二种方法是使用C++(和C)的关键字typedef来创建别名。例如,要将byte作为char的别名,可以这样做:

      typedef char byte;
      // 下面是通用格式:
      typedef 类型名 别名;
      

      要让byte_ pointer 成为char指针的别名,可将byte_pointer声明为char指针,然后在前面加上typedef:

      typedef char* byte_pointer;
      
    • 也可以使用#define,不过声明一系列变量时,这种方法不适用。例如,请看下面的代码:

      #define FLOAT_ POINTERE float*
      FLOAT_ POINTERE pa, pb;
      
      // 预处理器置换将该声明转换为这样:
      float* pa, pb;  // pa 是 float的指针,而pb 是float
      
    • typedef方法不会有这样的问题。它能够处理更复杂的类型别名

    • 注意,typedef不会创建新类型,而只是为已有的类型建立一个新名称。如果将word作为int的别名,则cout将把word类型的值视为int类型

    展开全文
  • 类型别名 区别 自定义类型 使用type关键字来定义自定义类型 //自定义类型是定义了一个全新的类型 // 1. 基于内置的基本类型定义 // 2. 通过struct定义 //将MyInt类型定义为int类型 type MyInt int 类型别名 ...
  • 文章目录类型别名指针类型别名 类型别名 传统方式,使用 typedef, cpp11,可使用 using typedef int mi; //int 别名 mi mi xa = 88; using mii = mi; //mi别名mii mii xb = 88; cout << (xa == xb) << ...
  • C++ 类型别名

    2018-11-29 04:43:00
    类型别名(type alias) 类型别名: 类型的另外一个标识符。 类型别名的用途: 可以使复杂的类型标志变得简短明了、更易于理解和使用,有助于程序员清楚的直到使用该类型的真实目的。 有两种方法可以用于定义...
  • Go类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如string,整型,浮点型,布尔等数据类型,Go语言可以使用type关键字来定义自定义类型 自定义类型是定义了一个全新的类型。我们可以给予内置的...
  • C++类型别名

    2019-10-04 15:31:17
    C++类型别名 #include <iostream> using namespace std; typedef double db; typedef db db1; using integer = int; /* 处理类型: 类型别名: 1. typedef double db; typedef db db1; // 将...
  • TypeScript类型别名

    2020-04-09 10:01:52
    那么通过类型别名进行定义,那么下面我们可以是我们定义的类型 type strType=string|number|boolean; var str2:strType="10"; str2=10; str2=true; 当然我们可以对我们的接口也采用类型别名方式 interface muchTy.....
  • typedef类型别名

    2018-12-16 16:10:00
    typedef类型别名 typedef被解释为类型别名,例如, typedef int abc; 这里将abc作为int的别名,也就是说int a; 和 abc a; 是完全等价的,但是绝对不能理解为可以将abc替换为int 虽然很多情况下是没有问题的,但有些情况...
  • Swift 类型别名

    2018-03-23 10:17:00
    类型别名 在 Swift 语言中使用 typealias 关键字定义类型别名。 typealias ShortInteger = Int8
  • c++类型别名

    2017-09-23 15:30:39
    1、类型别名定义 类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。有两种...
  • 文章目录自定义类型类型别名区别实际类型不同自定义类型可以为类型添加方法 自定义类型 在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。 ...
  • switf类型别名

    2016-02-17 16:09:46
    类型别名就是对现有数据类型定义替代名称,类型别名可以帮助开发者使用更符合上下文的的名字来指代一个已经存在的类型。 类型别名语法如下: typealias 类型别名 = 已存在类型;
  • 关于类型别名

    2020-03-03 14:41:00
    设置类型的别名的两种方式: -使用 typedef typedef std::string::size_type testType;...使用类型别名 using testType = std::string::size_type; testType cursor = 0; 两种方式等价,可以根据喜好使用。 ...
  • 定义 package main import "fmt" type myInt int //自定义类型 type yourInt = int //类型别名 func main() { var n myInt n = 100 fmt.Println(n) ...1、类型别名编译时会被转成对应类型,可以与相同
  • MyBatis类型别名

    2020-11-06 21:49:23
    在配置文件中写实体类的路径很麻烦,类型别名可以为java类型设置一个短的名字,减少类完全限定名的冗余。 1. 指定类 <typeAliases> <typeAlias type="xxx.xxx.xxx" alias="xx"/> </typeAliases>...
  • 接口 vs 类型别名

    2021-03-29 19:50:06
    类型别名 类型别名会给一个类型起个新名字。 类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。 type Name = string; type NameResolver = () => string; type ...
  • Mybatis类型别名

    2020-10-25 00:01:48
    Mybatis类型别名表.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,620
精华内容 5,848
关键字:

类型别名