首页 > 其他分享 >显式关键字是什么意思?

显式关键字是什么意思?

时间:2023-10-25 20:44:06浏览次数:33  
标签:foo int DoBar 编译器 关键字 意思 显式 Foo 构造函数

内容来自 DOC https://q.houxu6.top/?s=显式关键字是什么意思?

在C++中,explicit关键字是什么意思?


编译器被允许进行一次隐式转换以解析参数为函数。这意味着编译器可以使用带有单个参数的构造函数将类型转换为另一个类型,以获得正确的参数类型。

以下是具有可用于隐式转换的构造函数的示例类:

class Foo
{
private:
  int m_foo;

public:
  // 单参数构造函数,可用于隐式转换
  Foo (int foo) : m\_foo (foo) {}

  int GetFoo () { return m_foo; }
};

以下是接受Foo对象的简单函数:

void DoBar (Foo foo)
{
  int i = foo.GetFoo ();
}

这是调用DoBar函数的地方:

int main ()
{
  DoBar (42);
}

参数不是Foo对象,而是int。但是,存在一个接受intFoo构造函数,因此该构造函数可用于将参数转换为正确的类型。

编译器只允许对每个参数执行一次此操作。

在构造函数前加上explicit关键字会阻止编译器使用该构造函数进行隐式转换。在上面的类中添加它会导致在函数调用DoBar (42)时出现编译器错误。现在必须显式地使用转换DoBar (Foo (42))来调用它。

您可能需要这样做的原因是为了避免意外构建而隐藏的错误。

牵强的例子:

  • 您有一个带有给定大小的字符串构造函数的MyString类,以及一个print(const MyString&)(以及重载的print (char *string))函数,并且您调用了print(3)(当您实际上打算调用print("3")时)。您期望它会打印"3",但它打印了一个长度为3的空字符串。

标签:foo,int,DoBar,编译器,关键字,意思,显式,Foo,构造函数
From: https://www.cnblogs.com/xiaomandujia/p/17788085.html

相关文章

  • C#中base关键字的几种用法
    base最大的使用就是“面向对象”开发的多态中。base可以对派生类(子类)实例中调用基类(父类)的构造函数方法或者基类上已经被重写的虚方法。首先声明两个类ABpublicclassA{publicA(){Console.WriteLine("我是父类A");}......
  • MySQL约束条件和查询关键字
    1.约束条件约束条件(在数据类型的基础上在进行约束)1.unsigend#只能是正数不能有负数比如年龄2.zerofill#零填充比如int类型可以用零填充来显示3.default#默认值在不填写的情况下使用默认值比如性别默认为男4.notnull#非空5.u......
  • spring data jpa 使用原生sql查询数据库 原生sql中有in关键字 该如何传参?直接传List集
    springdatajpa使用原生sql查询数据库原生sql中有in关键字该如何传参?直接传List集合就能找到数据,解析List集合交给springdatajpa框架去做遇到问题?第一次写的时候in关键字后面传的是将List集合转化为一个这样的字符串,"'123','23','23'" @Query(nativeQuery=true,......
  • JavaSE day02【关键字,代码块,接口,枚举】测评
    选择题题目1(单选):下列关于static关键字描述错误的是()选项:​ A.静态成员被所类的所有对象共享​ B.可以通过对象调用,也可以通过类名调用,建议使用类名​ C.每调用一次都会在内存产生一个新的对象​ D.随着类的加载而加载,优先于对象存在题目2(多选):......
  • JavaSE day02-关键字,接口,代码块,枚举
    JavaSEday02-关键字,接口,代码块,枚举1关键字2代码块3接口4枚举1Java中的关键字1.1static关键字static关键字:静态的意思,可以修饰变量,也可以修饰方法,被static修饰的成员,我们叫做静态成员static特点:静态成员被所类的所有对象共享随着类的......
  • 不好意思,是一个细思极恐的状态
    不好意思,是一个细思极恐的状态A是个变态在一开始总是偶尔在讨论问题的时候制造一些无意识肢体接触(这里你以为是无意识,其实他是刻意的有意为之,装的很像)。在之后的相处时间中慢慢的肢体接触SkinTouch升级,从无意的触碰到讨论问题的时候有意推搡肩膀勾肩搭背,到后来的抚摸后背,直到有一......
  • Java 中的 Default 关键字
    default关键字:是在Java8中引入的新概念,也可称为Virtualextensionmethods——虚拟扩展方法与public、private等都属于修饰符关键字,与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。default修饰方法时只能在接口类中使用,在接口中被default标记的方法可......
  • MySql 关键字 COALESCE
    MySQLCOALESCE()函数用于返回表达式列表中的第一个非空值。如果列表中的所有值均评估为NULL,则COALESCE()函数将返回NULL。COALESCE()函数接受一个参数,该参数是可以包含各种值的列表。MySQLCOALESCE()函数返回的值是表达式列表中的第一个非空值;如果列表中的所有值均为NULL,则为N......
  • C# switch 表达式 - 使用 switch 关键字的模式匹配表达式
    https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/switch-expression[DisplayName("空气质量指数颜色")]publicstringTvocColor=>AQIswitch{1=>"green",2=>......
  • C# ref, in, out关键字
    写在前面:大内老A的这篇“老生常谈:值类型VS引用类型”放在微信收藏里好几个月了,终于趁着要讲JAVA传参机制的时候仔细地按照这篇博客,自己写代码跑一下,对C#的传参,ref,in,out关键字有了一个更好的理解。因此本文仅记录自己的学习心得。1.值传递&引用传递2.ref关键字3.in关键字4.o......