首页 > 编程语言 >C++ | 关键字 explicit

C++ | 关键字 explicit

时间:2023-09-22 17:15:50浏览次数:40  
标签:point int explicit C++ 关键字 隐式 构造函数

假如有一个类如下:

class point{
public:
    int x, y;
    Point(int _x = 0, int _y = 0){
        x = _x, y = _y;
    }
};

如果以下面两种方式初始化该类的对象:

void displayPoint(const point & p){
    printf("(%d,%d)\n", p.x, p.y);
}
void main(){
    displayPoint(1);
   	ponit p = 1;
}

都将通过编译且运行成功。这就是构造函数的隐式调用(如果构造函数没有使用默认参数,那无法通过编译)

这种隐式调用构造函数有时候会导致意想不到的后果,所以便出现了explicit关键字,来禁止构造函数使用隐式构造。

改进后的point类:(仅仅在构造函数前加入explicit关键字)

class point{
public:
    int x, y;
    explicit Point(int _x = 0, int _y = 0){
        x = _x, y = _y;
    }
};

标签:point,int,explicit,C++,关键字,隐式,构造函数
From: https://www.cnblogs.com/C111111/p/17722869.html

相关文章

  • c++ chat* 转 wchar*
    wchar_t*charToWchar(constchar*src){size_tsize=strlen(src)+1;wchar_t*dest=newwchar_t[size];size_toutSize;mbstowcs_s(&outSize,dest,size,src,size-1);returndest;} stringwstr2str(constwstring&wstr)......
  • c++ struct
    将数组中元素赋值给struct中元素(类型需一致,否则保持默认值),若数组元素少,struct中未被赋值的保持默认值。若数组元素多,对应位置的元素会赋值给struct。#include<iostream>structMyStruct{shortn1;//默认0shortn2;};intmain(){uint16_tnArray[4]=......
  • C++ 智能指针概述
    原始指针要想了解智能指针,就需要首先了解原始指针的痛点,原始指针有几点问题忘记释放内存->产生内存泄漏在尚有指针引用内存的情况下释放内存(使用已经释放掉的对象)->产生引用非法内存的指针同一块内存释放2次智能指针的产生本质上都是为了解决这些问题关于使用new动态分......
  • 4.7 Java this关键字详解(3种用法)
    this关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。下面我们根据示例分别讲解this关键字的作用。this.属性名大部分时候,普通方法访问其他方法、成员变量时无须使用this前缀,但如果方法里......
  • C++系列十:日常学习-进程间通讯
    目录前言介绍照片:后续:前言V~~~V。介绍进程间通讯(Inter-ProcessCommunication,IPC)是操作系统中的一个重要概念,用于不同进程之间的数据传输和交互。有多种方式可以实现进程间通讯,以下是其中一些常见的方式:管道(Pipe):管道是一种单向通信方式,通常用于具有父子关系的进程之间。它分......
  • C++-内存管理
    今天,和大家分享一些与内存管理相关的知识,本次的内容主要是new和delete的使用。内存这一块的知识,我们在学习C语言的时候,就有作相对细致的了解。我们现在来写几道题。做一个简单的回顾复习。内存的分布我们先来看看,下面一段代码:intglobalVar=1;staticintstaticGlobalVar=1;v......
  • C++中文开发【笑】
    娱乐一下,切勿上纲上线。你会不会还在为代码中众多英文单词感到苦恼。现在只需要引入一个库,你就可以进行C++真·中文开发。示例代码:#include"chinesecpp.h"使用命名空间std;整型划分数组(整型指针数组,整型左下标,整型右下标){ 整型主元位置=(左下标+右下标)......
  • Python中*args(参数)和 **kwargs(关键字参数)的区别
    *args--Python可以使用*args传递多个参数,但是不能使用它来传递键值对(字典)参数。**kwargs--Python另一个名为**kwargs的参数允许我们将字典类型的键值对参数传递给函数。注:两者均支持可变数量的参数传递。......
  • C++ RAII在HotSpot VM中的重要应用
    RAII(ResourceAcquisitionIsInitialization),也称为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII的做法是使用一个对象,在其构造时获取资源,在对象生命期控制范围之下......
  • 湖南大学个人项目C++互评
    优点模块化设计:代码有一个良好的模块化设计,其中每个类和函数都有一个特定的目的。可扩展性:由于使用了继承和多态,该设计易于扩展。例如,添加新类型的问题生成器相对简单。用户交互:代码包含用户交互,允许用户登录并选择问题类型和数量。文件操作:代码成功地将生成......