C++ 为什么';转换模板类中调用的构造函数?
我编写了一个简单的C++ 为什么';转换模板类中调用的构造函数?,c++,C++,我编写了一个简单的C++程序: #include <stdint.h> #include <iostream> using namespace std; class B { public: B(const bool& value = false) {cout << "B" << endl;} }; template <typename t1, typename t2> class A { public: A
C++
程序:
#include <stdint.h>
#include <iostream>
using namespace std;
class B {
public:
B(const bool& value = false) {cout << "B" << endl;}
};
template <typename t1, typename t2>
class A {
public:
A(const t1 &value) {cout << "A1" << endl;};
A(const t2 &value) {cout << "A2" << endl;};
};
int main() {
typedef A<B, int8_t> T;
T v(false);
return 0;
}
false
可以触发B
的转换构造函数(B(const bool&value=false){cout调用第一个构造函数将需要用户定义的从bool
到B
的转换。调用第二个构造函数将需要从bool
到int8\t
的标准转换。后者是更好的匹配,我认为这很自然
13.3.3.2隐式转换序列的排序
2当比较隐式转换序列的基本形式时(如13.3.3.1所定义)
-标准转换序列(13.3.3.1.1)比用户定义的转换序列或省略号转换序列更好,并且
-用户定义的转换序列(13.3.3.1.2)比省略号转换序列(13.3.3.1.3)更好
<>记住 BOOL被认为是C++中的一个积分类型,所以转换为INT8YT确实是一个不可忽视的从一个完整类型到另一个集成类型的转换。用户定义的转换是一个更为重要的过程。语言规则有利于简单的转换为<代码> int。调用第一个构造函数将需要用户定义的从bool
到B
的转换。调用第二个构造函数将需要从bool
到int8\t
的标准转换。后者是更好的匹配,我认为这很自然
13.3.3.2隐式转换序列的排序
2当比较隐式转换序列的基本形式时(如13.3.3.1所定义)
-标准转换序列(13.3.3.1.1)比用户定义的转换序列或省略号转换序列更好,并且
-用户定义的转换序列(13.3.3.1.2)比省略号转换序列(13.3.3.1.3)更好
<>记住 BOOL被认为是C++中的一个积分类型,所以转换为INT8YT确实是一个不可忽视的从一个完整类型到另一个集成类型的转换。用户定义的转换是一个更为重要的过程。语言规则有利于简单的转换为<代码> int。8\u t
T v(false);