c – 具有多个非可选参数的转换构造函数如何看起来如何?为什么它有意义?

c – 具有多个非可选参数的转换构造函数如何看起来如何?为什么它有意义?,第1张

概述至于我使用“转换构造函数”,它们看起来像这样: 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(),so 至于我使用“转换构造函数”,它们看起来像这样:
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 Conversion by constructor

A constructor declared without the function-specifIEr explicit that can be called with a single parameter specifIEs a
conversion from the type of its first parameter types of its parameters to the type of its class. Such a constructor is called
a converting constructor.

(斜体最初加下划线,但降价不接受< u>)

这似乎表明改变了转换构造函数不必“使用单个参数”可调用,并且从“其第一个参数的类型”更改为“其参数类型”(请注意复数!)支持这个.虽然我希望“其第一个参数的类型”将更改为“其单个非可选参数的类型”(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-list wording.

一个例子:

struct S {    S(int x,double y) { }};voID f(S) { }int main() {    f({ 42,42.0 });}
总结

以上是内存溢出为你收集整理的c – 具有多个非可选参数的转换构造函数如何看起来如何?为什么它有意义?全部内容,希望文章能够帮你解决c – 具有多个非可选参数的转换构造函数如何看起来如何?为什么它有意义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1239481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存