具有多个非可选参数的转换构造函数是什么样子的?为什么它有意义
How does a converting constructor with more than a single non-optional parameter look like and why does it make sense?
就我使用的"转换构造函数"而言,它们看起来是这样的:
struct X {
X(A); // conversion from A -> X
X(B,C = someC); // conversion from B -> X, with some default C
};
X x1 = A(); // calls X::X(A())
X x2 = B(); // calls X::X(B(),someC)
这是完全合理的,据我所知,只要你没有构造函数,它就会起作用:
struct Y {
Y(A,B); // no implicit conversion
};
然而,这正是它变得有趣的地方,C++11标准的字面意思是:
12.3.1构造函数的转换
- 在不使用函数说明符
explicit
的情况下声明的构造函数(可以使用单个参数调用)指定从其第一个参数的类型其参数的类型转换为其类的类型。这样的构造函数称为转换构造函数
(斜体字最初带下划线,但markdown不接受<u>
)
这似乎表明已经更改,转换构造函数不必"用单个参数"调用,从"第一个参数的类型"更改为"其参数的类型s"(注意复数!)进一步支持了这一点。虽然我预计"其第一个参数的类型"将更改为"其单个非可选参数的类型"(1),甚至"接收到显式参数的参数类型"(2),以允许这些:
struct Z {
Z(A = a, B, C = c); // (1)
Z(D = d, E = e, F = f); // (2)
};
Z = D(); // (2)
Z = E(); // (2)
我看不出复数形式的公式有什么意义:它真的表明你可以用几个参数进行转换吗?这是什么意思
作为添加初始值设定项列表的一部分,对语言进行了修改。参见n2672:init列表措辞。
一个例子:
struct S {
S(int x, double y) { }
};
void f(S) { }
int main() {
f({ 42, 42.0 });
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- 为什么 Serial.println(<char[]>);返回随机字符?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 为什么不;名字在地图上是按顺序排列的吗
- 我的字符计数代码计算错误.为什么
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 为什么 std::unique 不调用 std::sort?
- 既然存在危险,为什么项目要使用-I include开关
- 为什么在运行时没有向我们提供有关分段错误的更多信息?