C++ 包含类型参数的构造

C++ 包含类型参数的构造,c++,reference,C++,Reference,我不确定这里使用的术语是什么,这使得查找有关它的信息变得很困难。这让我在代码中感到惊讶(点击编译,意识到我忘记了更新一些地方…它编译了,并且运行时没有错误),我制作了一个简单的示例来验证它 我有一个包含另一个类的容器类。它有一个构造函数,该构造函数接受对它所包含的类的常量引用。我有另一个函数,它接受容器类的常量引用。我可以将包含类的实例传递给函数,它会自动为我创建容器类的临时实例。也没有警告(-Wall-pedantic-Wextra-Werror) 这叫什么?这类转换工作的要求是什么 我可以看

我不确定这里使用的术语是什么,这使得查找有关它的信息变得很困难。这让我在代码中感到惊讶(点击编译,意识到我忘记了更新一些地方…它编译了,并且运行时没有错误),我制作了一个简单的示例来验证它

我有一个包含另一个类的容器类。它有一个构造函数,该构造函数接受对它所包含的类的常量引用。我有另一个函数,它接受容器类的常量引用。我可以将包含类的实例传递给函数,它会自动为我创建容器类的临时实例。也没有警告(
-Wall-pedantic-Wextra-Werror

这叫什么?这类转换工作的要求是什么

我可以看出,这是有道理的工作,但有更多的比编译器的魔术吗

编辑:


有用的链接:

如果C++有一个未标记为
explicit
的单参数构造函数,它将为您隐式构造容器类。为了避免意外发生这种情况,通常将一元构造函数限定为明确的:

explicit Container(const A& a);

现在它不会编译(在某些情况下,这是一种改进,以避免在代码实际上是错误的或不需要的情况下意外地“工作”代码)。

C++将隐式地为您构造容器类,如果它有一个未标记为
explicit
的单参数构造函数。为了避免意外发生这种情况,通常将一元构造函数限定为明确的:

explicit Container(const A& a);
现在它不会编译(在某些情况下,这是一种改进,以避免在代码实际错误或不受欢迎时意外地“工作”代码)

explicit Container(const A& a);