c – 如何解决转换构造函数和普通构造函数之间的歧义?

c – 如何解决转换构造函数和普通构造函数之间的歧义?,第1张

概述我期待消除普通构造函数和自动转换构造函数之间的歧义. 据我所知,通过将普通构造函数声明为显式,可以部分消除这种歧义,因此编译器将避免使用此构造函数作为转换构造函数,如下所示: #include <iostream>#include <fstream>class Integer{ int i ;public: explicit Integer (const int _i) : 我期待消除普通构造函数和自动转换构造函数之间的歧义.

据我所知,通过将普通构造函数声明为显式,可以部分消除这种歧义,因此编译器将避免使用此构造函数作为转换构造函数,如下所示:

#include <iostream>#include <fstream>class Integer{  int i ;public:  explicit  Integer (const int _i) : i(_i) {} //normal constructor  Integer (const int& ii ) : i (ii) {}        // conversion constructor  operator int() {return int (i) ;}         // auto-conversion operator  frIEnd std::ostream & operator <<(std::ostream &os,const Integer io ) {    std::cout << io.i  ;    return os ;}};int main() {// Integer io (5); call of overloaded ‘Integer(int)’ is ambiguous error   Integer io2 = 20 ;          // conversion constructor  std:: cout << io2 << "\n" ;  int i = io2 ;               // auto-conversion operator  std:: cout << i << "\n" ;}

输出:

2020

我的问题是:

1-是否有一种强制使用构造函数作为转换构造函数的标准方法,因为有一种强制使用的标准方法作为普通构造函数?

2-使用转换构造函数和自动转换运算符是一个好习惯,换句话说,如果正常的构造函数没有用转换构造函数重载,我可以确保不同的编译器将构造函数用作转换构造函数吗?

谢谢

解决方法

Is there a standard way to force using a constructor as conversion
constructor,since there is a standard way to force usage as normal
constructor?

是的,您省略了explicit关键字.

is it a good practice to use conversion constructor and autoconversion
operators,in another words can I ensure that different compilers will
use the constructor as conversion constructor in case if normal
contructor is not overloaded with conversion constructor ?

如果编译器符合标准,那么这里没有问题.隐式结构没有错.当你构造对象的文字数组等时,它们可以非常方便.也可以令人惊讶.用你的判断.

总结

以上是内存溢出为你收集整理的c – 如何解决转换构造函数和普通构造函数之间的歧义?全部内容,希望文章能够帮你解决c – 如何解决转换构造函数和普通构造函数之间的歧义?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/langs/1227631.html

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

发表评论

登录后才能评论

评论列表(0条)

保存