在以下程序中,使用temporary:
直接初始化a
#include <iostream>
struct B{ };
struct A
{
A(int, B){ std::cout << "A(int, B)" << std::endl; }
};
A a({4,B()});
int main(){ }
但标准所说的是N3797::8.5/17 [dcl.init]
:
- 如果目标类型是(可能是cv限定的)类类型:
- 如果初始化是直接初始化,或者它是复制初始化,那么cv- 源类型的非限定版本与类的类相同,或类的派生类 目的地,建设者被考虑。
- 否则(即用于剩余的复制初始化案例), 用户定义的转换序列,可以从源转换 键入目标类型或(使用转换函数时) 按照13.3.1.4的描述列举其派生类别, 并且通过重载决策(13.3)选择最好的一个。
[...]
我不明白适用于该案例的规则是什么?为什么临时创建和初始化表达式{4,B()}
的类型是什么?