【发布时间】:2026-01-31 04:00:01
【问题描述】:
假设我们有定义构造函数X(int value) 的类X。
这在语义上是否等效?
X x = 42;
X x(42);
我相信只有在 X 的构造函数中添加 explicit 关键字时才会出现差异。
否则编译器会将表达式X x = 42; 简化为X x(42);
如果我错了,请纠正我。
【问题讨论】:
标签: c++ constructor explicit-constructor
假设我们有定义构造函数X(int value) 的类X。
这在语义上是否等效?
X x = 42;
X x(42);
我相信只有在 X 的构造函数中添加 explicit 关键字时才会出现差异。
否则编译器会将表达式X x = 42; 简化为X x(42);
如果我错了,请纠正我。
【问题讨论】:
标签: c++ constructor explicit-constructor
表格
X x = 42;
要求构造函数是非显式的并且有一个可访问的复制构造函数。允许该实现构造一个临时的并将其复制过来,但我所知道的任何实现都没有这样做。
【讨论】:
X x = X(42) 混淆了?
根据规范中的语言,这两种操作在语义上有所不同,但在以下情况下编译后的有效结果是相同的:
X 的单个参数构造函数可以采用整数类型,并且参数类型不是非常量左值引用X 有一个单参数构造函数,其中整数类型可以转换为参数类型,并且参数又不是非 const 左值引用explicit
【讨论】: