首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏pandacode_cn

    Swift基础 不透明类型

    与返回类型为协议类型的值不同,不透明类型保留类型标识——编译器可以访问类型信息,但模块的客户端不能访问。 不透明类型解决的问题 例如,假设您正在编写一个绘制ASCII艺术形状的模块。 返回不透明类型 你可以把不透明类型想象成通用类型的反面。通用类型允许调用函数的代码为该函数的参数选择类型,并以从函数实现抽象出来的方式返回值。 opaqueJoinedTriangles = join(smallTriangle, flip(smallTriangle)) 9. print(opaqueJoinedTriangles.draw()) 10. // * 11 不透明类型和协议类型之间的差异 返回不透明类型看起来与使用协议类型作为函数的返回类型非常相似,但这两种返回类型在是否保留类型标识方面有所不同。 相比之下,不透明类型保留了底层类型的身份。Swift可以推断关联类型,这允许您在协议类型不能用作返回值的地方使用不透明的返回值。

    50200编辑于 2023-07-17
  • 来自专栏Swift-开源分析

    if #available与不透明结果类型

    介绍SE-0360, Swift 5.7 已实现自 SE-0244 引入以来,不透明的结果类型已成为类型级抽象的强大工具,允许库作者隐藏其API的实现细节。 根据 SE-0244 中描述的规则,返回不透明结果类型的函数必须从每个返回语句中返回与T类型相同的值,并且T必须满足不透明类型上所述的所有约束。 当前模型和实现限制了不透明结果类型作为抽象机制的有用性,因为它阻止了框架引入新类型并将其用作现有API 的基础类型。为了弥补这一可用性差距,本篇提议建议在可用条件下放宽对返回的同类型限制。 提议的动机为了说明在不透明结果类型和可用性条件之间的交互问题,我们列举个框架例子,该框架下定义Shape协议,并且Square类型已经遵循该Shape协议,如下:protocol Shape { func 所有在给定的if #available子句内的return语句必须每次返回相同的类型,这种类型必须与子句的#available条件一样可用。并且这个类型不必与子句之外的其他任何返回类型相同。

    74750编辑于 2022-11-30
  • 来自专栏Swift-开源分析

    Swift5.7 扩展不透明类型(some)到泛型参数

    当某个参数类型内出现了一个不透明类型时,这个不透明类型会被没有名字的泛型参数代替。举个例子:func f(_ p: some P) { }与下面的例子是等价的。此时参数p表示一个遵循协议P的任何类型。 func f<_T: P>(_ p: _T) { }与不透明结果类型不同,调用方通过类型推断确定不透明参数类型的真实类型。 -> Void = f // ✅,推断不透明类型为 StringSE-0328 这篇提议是讲结构化的不透明结果类型,它扩展了不透明结果类型,允许在结果类型中的任何结构位置多次使用some P类型不透明结果类型不透明参数类型其实很相似,都是使用some 关键字来修饰,前者用在返回结果中,后者用在参数中。本质都是表达遵循同一协议类型的泛型类型。 函数类型的参数中使用不透明参数SE-0328 禁止在函数类型的参数中使用不透明参数。

    3.3K141编辑于 2022-07-03
  • 来自专栏Swift-开源分析

    Swift5.7 支持结构化不透明结果类型

    介绍当前提议主要是讲苹果在 Swift5.7 支持不透明结果类型的结构化表达,目前在 Swift5.7 已经实现。不透明结果类型可以用作函数的结果类型,变量的类型和下标元素的结果类型。 在这三种情况下,不透明结果类型必须是整个类型。比如用于函数的整个返回结果类型。本篇提议建议取消这种限制,并允许在“结构”位置使用不透明的结果类型。 所以我们应该允许在函数的结果类型、下标元素的类型和变量的类型,这三种类型的结构位置中使用不透明结果类型。详细设计实现可选语法不透明结果类型的可选必须使用(some P)? 高阶函数如果函数的结果类型、下标的结果类型和变量的类型是函数类型,那么该函数类型只能在返回位置包含结构不透明类型。 SE-0244 提议已经说明:不透明结果类型是函数的结果类型,变量类型,下标的元素类型,这三种类型的一部分。在不破坏API/ABI 稳定性的前提下,无法更改不透明结果类型的要求。

    88850编辑于 2022-07-04
  • 来自专栏黯羽轻扬

    this类型_TypeScript笔记11

    一.this也是一种类型! 出了当前类/接口的上下文,this的类型就是A<this: A>,类型兼容性等与泛型一致 所以,this类型就像一个带有类派生关系约束的隐式类型参数 三.Function this type 除了类/接口外 ,this类型还适用于普通函数 不同于class this type通常隐式发挥作用(如自动类型推断),function this type大都通过显式声明来约束函数体中this值的类型: This-types 实现原理 把this显式地作为函数的(第一个)参数,从而限定其类型,像普通参数一样进行类型检查。 ) 追踪context类型 有了this类型,bind、call、apply等场景也能正确维持类型约束,要求当前函数this与传入的目标对象类型一致: apply<T, A extends any[],

    94120发布于 2019-06-12
  • 来自专栏C/C++基础

    C++11 POD类型

    POD(Plain Old Data,普通旧数据)类型是从C++11开始引入的概念,Plain代表它是一个普通类型,Old代表它可以与C兼容。 严格来讲,一个对象既是普通类型(Trivial Type)又是标准布局类型(Standard-layout Type)那么这个对象就是POD类型。 注意,普通类型可以具有不同的访问说明说明符。下面我们使用模版类std::is_trivial<T>::value来判断数据类型是否为普通类型。 ---- 参考文献 [1]Trivial、standard-layout 和 POD 类型 [2]C++11之POD类型 [3]C++11新特性之POD类型 [4]POD (程序设计).wikipedia [5]深入理解C++11[M].3.8POD类型

    1.5K21发布于 2018-08-16
  • 来自专栏CSharp编程大全

    WPF窗体透明控件不透明实例

    WindowChrome.ResizeBorderThickness> </WindowChrome> </Window.Resources> <Grid> </Grid> </Window> 具有透明背景且包含不透明控件的

    2.7K10发布于 2020-12-15
  • 来自专栏C/C++基础

    C++11显示类型转换

    1.隐式类型转换的问题 隐式类型转换是C++一个让人又爱又恨的特性,使用方便,但可能会降低代码可读性,甚至会造成一些十分隐晦的错误。 随着项目代码规模变大,这种由隐式类型转换导致的隐晦错误会越埋越深,越来越难以发现。 2.显示类型转换 为了阻止容易导致隐晦错误的隐式类型转换,C++11引入了explicit关键字作用于自定义的类型转换操作符的功能,禁止隐式类型转换。 其用法类似于explicit作用于单参构造函数来避免单参数构造函数被隐式调用造成的隐式类型转换。 = 0; } cout << "myInt1+myInt2=" << myInt1 + myInt2 << endl; //编译出错 当使用explicit关键字修饰bool<em>类型</em>转换操作符时,隐式<em>类型</em>转换将会被阻止

    1K40发布于 2018-12-27
  • 来自专栏Java呓语

    11章、数据类型

    数字类型 MySQL 支持标准 SQL 中所有数据类型。 所有的这些类型包括: 精确的数据类型:INTEGER,SMAILLINT,DECIMAL,NUMERIC; 近似的数据类型:FLOAT,REAL,DOUBLE PRECISION; 关键字 INT 是 DECIMAL 和 NUMERIC 类型是精确类型。 数字类型属性 MySQL支持一个扩展,用于根据类型的基本关键字在圆括号中指定整数数据类型的显示宽度。例如,INT(4)指定一个显示宽度为四位的INT。 对于除了枚举类型之外的字符串值,其默认值是空字符串;对于枚举类型,其默认值则是枚举类型中的第一个值。

    2.3K20发布于 2018-08-21
  • 11-Rust 教程 - 集合类型

    集合类型 Vec、HashMap、String 详解:你的数据终于有地方住了 引入 还记得我们之前学的所有权吗?那时候你的数据就像流浪汉,不知道往哪儿放。 核心特点: 动态大小,自动扩容 元素类型必须相同 连续内存存储(访问快) 所有权管理(元素被移出时) HashMap - 键值对存储 这就像你的通讯录:名字是键,电话号码是值。 Vec 没有实现 Hash } 解决: 用实现了 Hash 的类型做键(String、&str、数字等) 3. 迭代时修改集合 fn main() { let mut nums = vec!

    11410编辑于 2026-04-13
  • 来自专栏C/C++基础

    C++11类型枚举

    为了解决以上传统枚举类型的缺陷,C++11引入了强类型枚举解决了这些问题。 2.强类型枚举 非强作用域类型,允许隐式转换为整型,枚举常量占用存储空间以及符号性的不确定,都是枚举类缺点。 针对这些缺点,C++11引入了一种新的枚举类型——强类型枚举(strong-typed enum)。 3.C++11对传统枚举类型的扩展 传统枚举类型为了配合C++11引入的强类型枚举,C++11对传统枚举类型进行了扩展。 (1)底层的基本类型可以在枚举名称后加上":type",其中type可以是除wchar_t以外的任何整型,比如: enum Type:char{Low,Middle,High}; (2)C++11中,枚举类型的成员可以在枚举类型的作用域内有效 ---- 参考文献 [1]深入理解C++11[M].5.1强类型枚举.P155-P161 [1]C++11类型枚举——枚举类

    3.5K20发布于 2019-01-03
  • 来自专栏CNCF

    Linkerd 2.10将支持不透明端口

    Linkerd 2.10的不透明端口和改进的协议检测 为了解决跳过端口的缺陷,在即将发布的2.10版本中,Linkerd将添加不透明端口的概念(和相应的opaque-ports注释)。 一个不透明的端口仅仅是一个Linkerd将代理而不执行协议检测的端口。 虽然这种方法仍然需要配置,但将端口标记为不透明允许Linkerd应用mTLS并报告TCP级别的指标——这比完全跳过它有很大的改进。 ? 这意味着,不使用不透明端口(或跳过端口)注释服服务器说话优先协议端口的最坏情况是10秒的连接延迟,而不是连接失败。 参考资料 [1] Kubernetes内进行gRPC连接负载平衡: https://linkerd.io/2018/11/14/grpc-load-balancing-on-kubernetes-without-tears

    94140发布于 2021-03-15
  • 来自专栏c++11

    c++11类型推导

    参考 effective modern c++ https://medium.com/@tjsw/%E6%BD%AE-c-11-universal-reference-rvalue-reference-move-semantics -1ea29f8cabdc C++11 新特性:decltype 模板类型推导 函数模板可以看成是这样: template<typename T> void f(ParamType param); ParamType ,忽略引用的部分 expr是cv的,也要忽略cv类型 实际测试: case 1 template<typename T> void f(T& param); // param是一个引用类型 int x decltype decltype可以表示变量或者表达式的类型 使用方式: decltype(expr) a; 注意点: 对一个变量名使用 decltype 得到这个变量名的声明类型。 //a: int & 尾随返回值类型 //c++11版本 //auto作为函数返回值,不能推导出c和i的类型,因为这时候c和i还没有声明 //通过--> decltype(c[i])表示函数返回值类型在函数参数后声明

    75140发布于 2020-07-09
  • 来自专栏C++11

    C++11 generalized PODs(平凡类型和标准布局类型

    C++11引入了许多新特性,其中generalized PODs(平凡类型和标准布局类型)是非常重要的概念。理解这些概念对于编写高效、安全的代码,以及与C语言进行交互都具有重要意义。 在C++11之前,POD类型的定义较为宽泛,但C++11对其进行了更细致的划分,将POD类型拆分为两个基本概念的集合,即平凡的(trivial)和标准布局的(standard layout)。 3.3 判断平凡类型的方法C++11提供了std::is_trivial模板类,用于判断一个类型是否是平凡类型。 4.3 判断标准布局类型的方法C++11提供了std::is_standard_layout模板类,用于判断一个类型是否是标准布局类型。 cout << "NonPODStruct is POD: " << std::is_pod<NonPODStruct>::value << std::endl; return 0;}六、总结C++11

    33800编辑于 2025-06-15
  • 来自专栏芝士就是菜

    C++11类型转换

    C语言中的类型转换 隐式类型转换 隐式类型转换(意义相近的类型) int i = 1; // 隐式类型转换(意义相近的类型) double d = i; printf("%d, %.2f\n", i, d); 显示类型转换 显示的强制类型转换(意义不相近的类型,值转换后有意义) int main() { int a = 1; int* p = &a; //int address = p; //这样没法隐式类型转换会报错 int address = (int)p; //强制类型转换没问题 printf("%x, %d\n", p, address); } C++强制类型转换 c ++也支持c的类型转换,但是c++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符 static_cast 这个就像c中的隐式类型转换,只不过显示的写了出来,static_cast用于非多态类型的转换 注: 兼容c隐式类型转换和强制类型转换 期望不要再用了,最好用规范的cpp显示强制类型转换 static_cast(隐式类型转换)、reinterpret_cast、const_cast(强制类型转换)

    63310编辑于 2023-04-20
  • 来自专栏海天一树

    小朋友学Python(11):变量类型

    Python 定义了一些标准类型,用于存储各种类型的数据。 Python有五个标准的数据类型: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) 一、数字 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。 TEST 三、列表 List(列表) 是Python 中使用最频繁的数据类型。相当于C/C++/Java中的数组。 列表可以完成大多数集合类的数据结构实现。 列表用 [ ] 标识,是 python 最通用的复合数据类型

    1.1K140发布于 2018-04-17
  • 来自专栏Devops专栏

    11.Go复合类型-字符串

    11.Go复合类型-字符串 前言 上一章节,我们已经学习了切片,本章节来看看 字符串。 3:字符串 我们从文件中将数据读取出来以后,很多情况下并不是直接将数据打印出来,而是要做相应的处理。

    34220编辑于 2022-01-17
  • 来自专栏TopFE

    CSS 使用rgba 设置背景色透明,内容不透明

    使用 css3的rgba(red, green, blue, alpha),alpha的取值从 0 到 1; 1为不透明 如rgba(255,255,255,0.8) 可以设置背景色透明,内容不透明 如一下 background: rgba(255,193,7, 1); 效果图 两者都没有透明 背景透明,内容不透明 两者都透明

    3.3K10编辑于 2022-01-24
  • 来自专栏10km的专栏

    c++11模板:获取函数的参数类型

    https://blog.csdn.net/10km/article/details/87891028 假设我们已经知道一个函数类型的定义double(unsigned char*, unsigned char*),如何获取这个函数定义中的输入和输出参数类型呢? c++11提供的模板函数std::function和std::tuple_element可以将一个函数定义的输入和输出参数类型一个一个解析出来,下面是实现代码 #include <functional> (Args); // 返回类型 typedef R result_type; // 输入参数类型,i为从0开始的参数类型索引 template <size_t i> struct )f1.element, /* 强制类型转换为function_traits<feacomp_fun>::arg<1>::type,第一个输入参数类型 */ (function_traits<

    5.2K30发布于 2019-05-25
  • 来自专栏C/C++基础

    C++11原子类型与原子操作

    C++11通过引入原子类型帮助开发者轻松实现原子操作。 使用C++11提供的原子类型与多线程标准接口,简洁地实现了多线程对临界资源的原子操作。 C++11对原子类型的操作进行了抽象,定义了统一的接口,并要求编译器产生平台相关的原子操作的具体实现。 C++11标准将原子操作定义为atomic模板类的成员函数,包括读(load)、写(store)、交换(exchange)等。对于内置类型而言,主要是通过重载一些全局操作符来完成的。 ---- 参考文献 [1]《深入理解C++11》笔记-原子类型和原子操作 [2]深入理解C++11[M].6.3原子类型与原子操作.P196-P214

    6.2K20发布于 2019-01-03
领券