据我所知,通过将普通构造函数声明为显式,可以部分消除这种歧义,因此编译器将避免使用此构造函数作为转换构造函数,如下所示:
#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 – 如何解决转换构造函数和普通构造函数之间的歧义?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)