explicit 的作用(如何避免编译器进行隐式类型转换)

发布于 2023-09-25 11:54:12 字数 1156 浏览 29 评论 0

作用:用来声明类构造函数是显示调用的,而非隐式调用,可以阻止调用构造函数时进行隐式转换。只可用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显示调用的,再加上 explicit 关键字也没有什么意义。

隐式转换:

#include <cstring>
#include <iostream>
using namespace std;

class A {
 public:
  int var;
  A(int tmp) { var = tmp; }
};
int main() {
  A ex = 10;  // 发生了隐式转换
  return 0;
}

上述代码中,A ex = 10; 在编译时,进行了隐式转换,将 10 转换成 A 类型的对象,然后将该对象赋值给 ex,等同于如下操作:

为了避免隐式转换,可用 explicit 关键字进行声明:

#include <cstring>
#include <iostream>
using namespace std;

class A {
 public:
  int var;
  explicit A(int tmp) {
    var = tmp;
    cout << var << endl;
  }
};
int main() {
  A ex(100);
  A ex1 = 10;  // error: conversion from 'int' to non-scalar type 'A' requested
  return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

甜扑

暂无简介

0 文章
0 评论
722 人气
更多

推荐作者

13886483628

文章 0 评论 0

流年已逝

文章 0 评论 0

℡寂寞咖啡

文章 0 评论 0

笑看君怀她人

文章 0 评论 0

wkeithbarry

文章 0 评论 0

素手挽清风

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文