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

标签 c++ type-conversion default-value explicit explicit-constructor

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

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

最佳答案

默认值的存在不会阻止单参数 ctor 用于隐式转换:如果你想阻止它,你需要添加 explicit

例如……:

#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 部分,即构造函数的一个参数的默认值,不会阻止此操作。

关于c++ - 具有默认值的单参数构造函数是否可以进行隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775277/

相关文章:

c++ - 是否可以获取正在监听 Windows 端口的进程的线程 ID?

c# - LibTiff.Net 将 Tiff 对象转换为字节数组并返回

css - chrome 中 textarea 的默认字体样式是什么? (文本输入 vs textarea "size"的文本)

Scala:如何使用默认值初始化对象

c++ - 构造函数错误 : error: expected ‘,’ or ‘...’ before numeric constant

c++ - 应该避免还是鼓励 `using std::cin` 和 `using std::cout`?

在参数数量可变的函数中将文本与数字连接起来

c# - 为什么无法识别 bool 默认值 (false)?

c++ - 多次实现成员功能

c++ - 为什么这个 double 到 int 的转换不起作用?