【发布时间】:2020-03-31 15:09:03
【问题描述】:
struct A
{
operator int() { return 12;}
};
struct B
{
B(int) {}
};
int main()
{
....
A a;
B b0 = 12;
// B b1 = a; //< error: conversion from 'A' to non-scalar type 'B' requested
B b2{a}; // < identical, calling A::operator int(), then B::B(int)
B b3 = {a}; // <
auto b4 = B{a}; // <
}
现在的问题是
- 对于 b2,直接初始化如何工作?可以直接初始化调用转换算子吗?
- 为什么 b1 的复制初始化失败?应该将 A 隐式转换为 int 并且可以调用 B 的构造函数。
- b3 也是复制初始化,但它可以工作。为什么会这样?
【问题讨论】:
-
一次只能进行一次隐式用户转换,
B b1 = a;需要2次
标签: c++ initialization