Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';转换模板类中调用的构造函数?_C++ - Fatal编程技术网

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);