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

    函数重载以及二义性

    上图可见: 调试结果, 调用了第三个重载函数, 并且c ( 9.8 ) 值强转为 int类型 ( 8 ) 相同方式测试 char 等类型也如此 函数重载二义性 问题来了!! 错误 以上这种情况就叫做二义性 解决二义性: 加入新的重载函数, 使用double类型形参 明确调用时实参强转类型: 传参前把数值强转为想要的类型 注: 编译器总是会把基本数据大的转为小的

    65960发布于 2021-04-02
  • 来自专栏跟Qt君学编程

    NULL与nullptr的二义性问题

    在编程逻辑世界,有因必有果,如果一个结果含糊不定(二义性),显然是我们不想要的。C++11中引入nullptr是为了解决NULL的二义性问题。 NULL二义性的体现 void func(int) {} void func(int *) {} 当函数调用func(NULL)时会是怎样执行?

    54810发布于 2019-09-17
  • 来自专栏前端开发

    箭头函数的意义和函数的二义性

    答案只有一个:消除函数的二义性。 函数的二义性 那什么是函数的二义性呢? ){} 这个时候就会出现歧义,因为这个函数有两种调用方式: function user(){}; // 普通方式调用 user(); // 当做构造函数调用 new user(); 这就是函数的二义性 因为函数的二义性,导致 JS 函数的复杂度直线上升,因为函数在创建的时候,创建者不知道未来的调用者如何调用,可能直接调用,也有可能通过 new 方法调用,这就会存在很大的安全隐患。 new.target){ throw('Uncaught TypeError: User is not a constructor') } } 所以调用者压根就不清楚函数的调用方式,这个函数的二义性 官方一直都知道这个问题,只是一直没解决,后来ECMAScript 6在给 JS 打补丁的时候,引入了两个概念: 箭头函数 class实例 它们的作用都是为了消除函数的二义性

    35610编辑于 2025-08-08
  • 来自专栏光城(guangcity)

    C++二义性问题之Most Vexing Parse

    Most Vexing Parse 0.导语 Most Vexing Parse 翻译为最烦人的解析,在使用 C++11 中 std::thread 创建对象的时候会遇到这种问题,除此之外,也会遇到,本文来看看在哪些场景可以遇到以及在 C++11 标准后的解决方案。 另外在 C++11 中也可以使用 Uniform initialization(统一初始化)来处理这种歧义: String ss{string(t)}; // ok 3.总结 这是一个经典的二义性问题

    97220发布于 2019-12-05
  • 来自专栏韩曙亮的移动开发专栏

    【C++】继承 ⑬ ( 虚继承原理 | 虚继承解决继承二义性问题 | 二义性产生的原因分析 )

    一、虚继承原理 1、虚继承解决继承二义性问题 继承的二义性 : 如果 一个 子类 ( 派生类 ) 继承多个 父类 ( 基类 ) , 这些父类 都继承了 相同的父类 , 那么 子类 访问 父类的父类 中的成员 , 就会产生 二义性 ; 报错 : error C2385: 对“x”的访问不明确 ; 使用 " 虚继承 " 可以解决上述问题 , 子类 继承父类时 , 在 访问限定符 之前使用 virtual 关键字 即可将 普通继承 改为 虚继承 ; 下面的代码中 A 是父类 ; B 类 和 C 类 虚继承 A 类 , 这样当 某个类 同时 多继承 B 类 和 C 类时 , 访问 A 类中的成员时 , 不会出现 二义性 ; 由于 B 和 C 虚继承 A , D 类访问 A 中的成员 , 不会产生二义性 ; class A { public: int x; }; // 子类 B 继承了父类 A 的 x 成员 class 二义性产生的原因 : 如果 上述 B 和 C 类 没有 虚继承 A 类 ; 上述 D 对象 创建时 , 会调用 两次 A 的构造函数 , 一次由 B 对象调用 , 一次由 C 对象调用 ; 此时 D

    60320编辑于 2023-10-27
  • 来自专栏韩曙亮的移动开发专栏

    【C++】继承 ⑫ ( 继承的二义性 | virtual 虚继承 )

    一、继承的二义性 1、场景说明 - 继承的二义性 A 类 是 父类 , B 类 和 C 类 继承 A 类 , 是 子类 , D 类 多继承 B 类 和 C 类 , 是 孙子类 ; 假如 A 类中有 成员变量 成员变量 x , D 类 多继承 B 类 和 C 类 , 会 分别从 B 和 C 各自 继承一个 成员变量 x ; D 类中 , 从 B , C 两个父类中继承自 爷爷类 A 的成员变量 , 会出现二义性 如果强行使用 对象.x 访问继承自 A , 会报错 error C2385: 对“x”的访问不明确 ; 定义 D 类的对象 d , 如果访问 继承自 A 类的 x 成员 , 则会出现二义性 ; // 定义 D 类对象 d D d; // 访问 继承自 A 类的 x 成员出现二义性 // 报错 error C2385: 对“x”的访问不明确 d.x = 40; 完整报错信息 : 1>--- ; 为了应对上述 继承的二义性 问题 , C++ 语言 使用 " 虚继承 " 解决 继承中的 二义性问题 ; C++ 中的 " 虚继承 " 是一种解决 多继承 带来的 菱形问题(diamond problem

    45720编辑于 2023-10-27
  • 【C++】菱形继承为何会引发二义性?虚继承如何破解?

    _name = "peter"; // 需要显示指定访问哪个基类的成员可以解决二义性问题,但是数据冗余问题无法解决 a.Student::_name = "xxx"; a.Teacher::_ name = "yyy"; return 0; } 通过上面的运行结果我们发现,菱形继承存在两个问题:(1)二义性问题;(2)数据冗余问题。 为什么会产生二义性问题? 解决二义性的办法:指定类域(是Teacher类的Person还是Student类的Person) 数据冗余问题很好理解,就是Assistant中包含了两个Person类的信息,正常情况下应该只包含一份 1.3虚继承 有了多继承就可能有菱形继承,而菱形继承又存在二义性和数据冗余等问题。所以C++就引入了虚继承来解决数据的冗余问题。

    23110编辑于 2025-12-23
  • 来自专栏韩曙亮的移动开发专栏

    【C++】多态 ⑫ ( 多继承 “ 弊端 “ | 多继承被禁用的场景 | 菱形继承结构的二义性 | 使用虚继承解决菱形继承结构的二义性 )

    有成员函数 和 成员变量 的 类 , 是不推荐的做法 , 实际开发中 , 绝对禁止 使用 上述类型的 多继承 ; 2、多继承弊端 多继承会带来一系列的问题 , 诸如 : 钻石问题 - 菱形继承结构 / 二义性错误 : 当一个类继承自多个类时 , 如果这些类有共同的基类 , 那么会出现菱形继承结构 , 也称为钻石问题 ; 该场景下 , C++ 编译器 无法确定应该使用哪个基类的成员 , 产生 二义性 ; 成员变量名相同 - 二义性错误 : 子类继承多个父类 , 父类之间没有相同的父类 , 但是 父类中 有相同名称的成员变量 , 此时也会产生二义性问题 , 需要使用域作用符访问父类中相同名称的成员 ; 破坏封装性 : ; 在 菱形继承结构 中 , 虚继承可以使 重复继承 的 父类 , 只继承 依次 ; 多继承的二义性 参考 【C++】继承 ⑫ ( 继承的二义性 | virtual 虚继承 ) 博客 ; 二、代码示例 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 2、代码示例 - 使用虚继承解决菱形继承结构的二义性 在下面的 菱形继承结构 中 , D

    89320编辑于 2023-11-05
  • 来自专栏编译原理

    编译原理 第二章下: 推导,规约,句型句子,语言,文法分类,二义性

    2.3 推导2.3.1 直接推导/直接规约简言之,一步直接退换例如:有文法GS:S→0S1,S→01有直接推导 0S1⇒0011有直接推导 0S1⇒00S11有直接推导S⇒0S12.3.2 推导/规约若存在直接推导序列 句型和句子1.句型 有文法GZ,若Z 0步以上推导出x,则称x是文法G的句型2.句子 有文法GZ,若Z 1步以上推导出且x都是终结符号,则称x是文法G的句子例:GS,S→0S1,S→01S⇒0S1⇒00S11 2.9 文法的二义性若一个文法存在某个句子或句型,它存在两棵不同的语法树,则称该句子或句型是二义性的,对应的文法也是二义性的。 二义性不可判定,从底向上看,二义性意味着句柄不唯一,解决二义性的方法是,加以限制,人为避免产生二义性2.9.1 有关文法的实用限制多余规则:指文法中任何句子的推导都不会用到的规则,若有则删去- 不可到达

    1K10编辑于 2024-09-20
  • 来自专栏汇编语言

    【C++掌中宝】C++ 中的空指针救世主——nullptr

    这导致在函数重载时可能会出现二义性问题。 2. NULL 在 C 和 C++ 中的区别 在 C 语言中,NULL 定义为 (void *)0,它可以隐式转换为任何类型的指针。 C++11 引入 nullptr 的原因 为了消除 NULL 在 C++ 中的二义性问题,C++11 引入了 nullptr 作为一种新型空指针常量。 相比之下,nullptr 是一种更加安全且明确的选择: 在C++中NULL 通常是整数 0,会引发二义性问题。 nullptr 是一个指针常量,可以隐式转换为任意指针类型,不会引发二义性问题。 模拟 nullptr 的实现 对于不支持 C++11 的编译器,我们可以自己模拟实现 nullptr。 为了消除这些问题,C++11 引入了 nullptr,作为一种类型安全的空指针表示。 在现代 C++ 编程中,强烈推荐使用 nullptr 代替 NULL,确保代码在空指针处理上更加明确和安全。

    63210编辑于 2024-10-22
  • 来自专栏三流程序员的挣扎

    2022-11-11-工作

    昨天的控件点击时通过外面,加个 listener。然后如果外部设定当前选中位置,也要刷新一下页面,所以刷新逻辑放到设置 textSelectedIndex 中去。

    26730编辑于 2022-11-13
  • 来自专栏静心物语313的Coding

    11 节: 11-HttpHandler简介

    1、新建--》项目--》选中Web项--》Asp.net空Web应用程序--》右键项目---》添加---》一般处理程序(这样建的网站是最好的方法,没有多余的代码生成) 2、新建--》网站--》Asp.net空网站(这是兼容ASP(VB语言 2000年的技术)开发方式)(不推荐用这种方式) 3、.ashx与ashx.cs文件 1)双击ashx文件会直接打开进入ash.cs文件。 2)类Test1实现了IHttpHandler 接口。IHttpHandler接口中的方法在类Test1中进行了重写(页面加载的过程应该是完成了:Shift+Alt+F10) 3)ashx文件中起作用的就是<....Class="Web.Test1">这个。 4)然后会调用这个Test1类中的方法ProcessRequest(HttpContext context):这个方法主要是处理页面的请求。 5)context.Response设置“响应”“context.Request获取“请求” 6)ashx.cs文件其实还是C#文件。网页逻辑编写。主要是这个文件

    51010发布于 2020-03-24
  • 来自专栏脑洞前端

    每日一荐周刊 2019-11-11 - 2019-11-15

    2019-11-15[网站] 有的什么我们需要在 Google Play 上下载软件,但是苦于没有通畅的网络(关于如何获取畅通的网络我在 2019-11-01 讲到,感兴趣可以看看)。 网站地址:https://apkpure.com/ 2019-11-14[技巧] 很多时候我们会看到一些英文的简写。 2019-11-13[技巧] 今天要分享的是关于 Bash 中历史记录那些事。 2019-11-12[技巧] dig 命令是常用的域名查询工具,可以用来测试域名系统工作是否正常。 ~ type dig # dig is /usr/bin/dig 2019-11-11[分享] 今天是双十一,大家剁手快乐。

    43510发布于 2019-11-26
  • 来自专栏flytam之深入前端技术栈

    leetcode 11

    题目大意,给n个点,在一个数轴上。每个点对x轴作垂线,找出由两条垂线和X轴组成的一个“容器”的装的水面积最大。就是两条垂线较小的高度*两垂线高度的面积最大。 1、暴力做法 两两遍历。显然是会超时的 2、思路一 从左到右,找出以每一个点所在的垂线作为较矮的高度时候的最大面积,把每个点的垂线作为最大面积一一比较即可。也就是一个点分别往左扫和往右扫。

    39910发布于 2020-01-14
  • 来自专栏mathor

    1小时深入c++面向对象编程

    图4-11 多继承构造函数格式 派生类构造函数负责所有基类构造函数的调用 派生类构造函数执行顺序:执行所有基类的构造函数>>执行所有子对象的构造函数>>执行派生类构造函数体 处于同一层次的各基类构造函数的执行顺序取决于定义派生类时所指定的各基类顺序 图4-12 多继承构造函数调用顺序 4.3 二义性问题 原因:在多继承情况下,造成的对基类中某个成员的访问出现的不唯一的情况 4.3.1 成员函数二义性 ? ,则对该基类中说明的成员进行访问时,可能会出现二义性 4.3.2 成员变量二义性 ? 图4-14 成员变量二义性 解决办法:1区别出是通过类B1或类B2调用类A的a,c1.B1::a或c1.B2::a                 2虚基类 4.3.3 解决办法 利用成员名限定法消除二义性 在类中定义一个同名成员 虚基类 4.3.4 特殊说明 一个类不能从同一个类中直接继承一次以上 二义性检查在访问控制和类型检查之前进行,访问控制和类型检查不能解决二义性问题 4.3.5 示例 ?

    78920发布于 2018-07-24
  • 来自专栏ops技术分享

    openstack(11

    服务需求:在配置 OpenStack 身份认证服务前,必须创建一个数据库及权限授权。

    60440发布于 2021-05-06
  • 来自专栏网络收集

    JavaScript(11

    表1 用于获日期时间的getXxx 方法 说明 getFullYear() 返回一个表示年份的4位数字 getMonth() 返回值是0(一月)到11(十二月)之间的一个整数 getDate

    36920编辑于 2022-04-06
  • 来自专栏技术杂记

    Gin 11

    - 16:14:57 | 400 | 1.487198ms | 192.168.56.105 | POST /loginJSON [GIN] 2018/07/11 - 16:15:12 181.733µs | 192.168.56.105 | POST /loginForm [GIN] 2018/07/11 - 16:15:34 | 400 | 368.599µs | | POST /loginForm [GIN] 2018/07/11 - 16:16:17 | 200 | 140.609µs | 192.168.56.105 | POST /loginForm [GIN] 2018/07/11 - 16:18:09 | 400 | 225.385µs | 192.168.56.105 | POST /loginForm of 18 bytes < HTTP/1.1 400 Bad Request < Content-Type: application/json; charset=utf-8 < Date: Wed, 11

    63120发布于 2021-08-10
  • 来自专栏phpcoders

    编译原理(第四版)复习 (一)

    规则用的是-> 推导的依据是规则 最右推导叫做规范推导,规范规约就是规范推导的逆过程; 句型和句子:如果起始符号推导出带非终结符的是句型;全是终结符则为句子; S—>01|0S1 像01,0S1,00S11 文法的二义性:一个文法存在某个句子有两种不同的语法树; 消除二义性方法:1.加一些语法的非形式规定,比如*比+先等;2.构造一个等价的无二义性的文法; 0型文法:左侧至少含有一个非终结符; A->AB

    63221发布于 2021-03-18
  • 来自专栏C/C++葵花宝典

    【C++进阶学习】第三弹——菱形继承和虚拟继承——菱形继承的二义性和数据冗余问题

    问题2:二义性 二义性是指在菱形继承的情况下,派生类可能会有两个或更多的基类提供了相同的函数或数据成员,这在调用时会导致编译器无法确定调用哪个版本。 例如,如果基类A和B都有一个同名的函数,而在派生类中没有明确指定调用哪一个,就会产生二义性错误。 6、多继承时的虚继承:当多个类同时virtually继承同一个虚基类时,虚基类的成员变量和成员函数在子类中只会存在一份,避免了冗余性和二义性问题。 此时,BaseClass 的成员变量 var 在 FinalChild 中只有一份,并且不会发生二义性问题。 总之,C++ 通过虚继承解决了菱形继承中的冗余性和二义性问题,使得在使用继承时更加灵活和安全。

    1K20编辑于 2024-06-22
领券