具有默认值的单参数构造函数是否可以进行隐式类型转换

发布于 2024-08-31 14:13:35 字数 126 浏览 5 评论 0原文

我了解使用显式关键字来避免单参数构造函数或具有多个参数(其中只有第一个参数没有默认值)的构造函数可能发生的隐式类型转换。

但是,我想知道,在隐式转换方面,具有默认值的单参数构造函数的行为是否与没有默认值的构造函数相同?

I understand the use of the explicit keyword to avoid the implicit type conversions that can occur with a single argument constructor, or with a constructor that has multiple arguments of which only the first does not have a default value.

However, I was wondering, does a single argument constructor with a default value behave the same as one without a default value when it comes to implicit conversions?

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱情眠于流年 2024-09-07 14:13:35

默认值的存在不会阻止单参数构造函数用于隐式转换:如果您想阻止它,则需要添加显式转换。

例如...:

#include <iostream>

struct X {
  int i;
  X(int j=23): i(j) {}
};

void f(struct X x) {
  std::cout << x.i << std::endl;
}

int main() {
  f(15);
  return 0;
}

正确编译和运行:

$ g++ -Wall -pedantic a.cc
$ ./a.out
15
$ 

正确,也就是说,如果您想要int隐式地变成struct X=23 部分(即构造函数的一个参数的默认值)不会阻止这一点。

The existence of a default value does not stop the single-argument ctor from being used for implicit conversion: you do need to add explicit if you want to stop that.

For example...:

#include <iostream>

struct X {
  int i;
  X(int j=23): i(j) {}
};

void f(struct X x) {
  std::cout << x.i << std::endl;
}

int main() {
  f(15);
  return 0;
}

compiles and runs correctly:

$ g++ -Wall -pedantic a.cc
$ ./a.out
15
$ 

correctly, that is, if you want an int to become a struct X implicitly. The =23 part, i.e. the default value for the one argument to the constructor, does not block this.

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