草庐IT

Ambiguous

全部标签

c++ - 为什么隐式转换对于非原始类型不模棱两可?

给定一个具有多个隐式转换函数(非显式构造函数和转换运算符)的简单类模板,如下例所示:templateclassFoo{private:Tm_value;public:Foo();Foo(constT&value):m_value(value){}operatorT()const{returnm_value;}booloperator==(constFoo&other)const{returnm_value==other.m_value;}};structBar{boolm;booloperator==(constBar&other)const{returnfalse;}};intmai

c++ - 为什么隐式转换对于非原始类型不模棱两可?

给定一个具有多个隐式转换函数(非显式构造函数和转换运算符)的简单类模板,如下例所示:templateclassFoo{private:Tm_value;public:Foo();Foo(constT&value):m_value(value){}operatorT()const{returnm_value;}booloperator==(constFoo&other)const{returnm_value==other.m_value;}};structBar{boolm;booloperator==(constBar&other)const{returnfalse;}};intmai

c++ - 为什么这个涉及重载运算符和隐式转换的 C++ 表达式不明确?

operatorbool打破operator的使用在下面的例子中。谁能解释为什么bool在if(a中同样相关表达式作为具体的操作符,是否有变通方法?structFoo{Foo(){}Foo(intx){}operatorbool()const{returnfalse;}friendbooloperator当我编译时,我得到:g++foo.cppfoo.cpp:Infunction'intmain()':foo.cpp:18:11:error:ambiguousoverloadfor'operatorfoo.cpp:8:17:note:candidate:booloperator

c++ - 为什么这个涉及重载运算符和隐式转换的 C++ 表达式不明确?

operatorbool打破operator的使用在下面的例子中。谁能解释为什么bool在if(a中同样相关表达式作为具体的操作符,是否有变通方法?structFoo{Foo(){}Foo(intx){}operatorbool()const{returnfalse;}friendbooloperator当我编译时,我得到:g++foo.cppfoo.cpp:Infunction'intmain()':foo.cpp:18:11:error:ambiguousoverloadfor'operatorfoo.cpp:8:17:note:candidate:booloperator

C++ 编译器错误 : ambiguous call to overloaded function

stringaux;intmaxy,auxx=0;cin>>aux;maxy=(int)sqrt(aux.size());我得到:1>errorC2668:'sqrt':ambiguouscalltooverloadedfunction1>couldbe'longdoublesqrt(longdouble)'1>or'floatsqrt(float)'1>or'doublesqrt(double)'为什么? 最佳答案 string::size()返回size_t,而sqrt在其任何版本中都不接受它。所以编译器必须强制转换,并且不能选

C++ 编译器错误 : ambiguous call to overloaded function

stringaux;intmaxy,auxx=0;cin>>aux;maxy=(int)sqrt(aux.size());我得到:1>errorC2668:'sqrt':ambiguouscalltooverloadedfunction1>couldbe'longdoublesqrt(longdouble)'1>or'floatsqrt(float)'1>or'doublesqrt(double)'为什么? 最佳答案 string::size()返回size_t,而sqrt在其任何版本中都不接受它。所以编译器必须强制转换,并且不能选

c++ - 为什么函数重载会在 C++ 中产生模棱两可的错误?

在以下代码片段中,在函数调用f(1)中,1是int类型的文字,并且在第一个函数中voidf(doubled)参数类型是double并且第二个函数voidf(shortinti)参数类型是shortint。这里1是int类型不是double类型,那么为什么编译器会产生歧义错误?#includeusingnamespacestd;voidf(doubled)//Firstfunction{cout 最佳答案 因为,正如您的评论所指出的,1是int类型的文字。对于编译器,int到shortint的隐式转换与int到的隐式转换同样有效dou

c++ - 为什么函数重载会在 C++ 中产生模棱两可的错误?

在以下代码片段中,在函数调用f(1)中,1是int类型的文字,并且在第一个函数中voidf(doubled)参数类型是double并且第二个函数voidf(shortinti)参数类型是shortint。这里1是int类型不是double类型,那么为什么编译器会产生歧义错误?#includeusingnamespacestd;voidf(doubled)//Firstfunction{cout 最佳答案 因为,正如您的评论所指出的,1是int类型的文字。对于编译器,int到shortint的隐式转换与int到的隐式转换同样有效dou

c++ - 使用花括号初始化列表 : ambiguous or not? 调用显式构造函数

考虑以下几点:structA{A(int,int){}};structB{B(A){}//(1)explicitB(int,int){}//(2)};intmain(){Bparen({1,2});//(3)Bbrace{1,2};//(4)}(4)中brace的构造清晰明确地调用了(2)。在clang中,(3)中paren的构造明确地调用(1),而在gcc5.2中,它无法编译:main.cpp:Infunction'intmain()':main.cpp:11:19:error:callofoverloaded'B()'isambiguousBparen({1,2});^main.c

c++ - 使用花括号初始化列表 : ambiguous or not? 调用显式构造函数

考虑以下几点:structA{A(int,int){}};structB{B(A){}//(1)explicitB(int,int){}//(2)};intmain(){Bparen({1,2});//(3)Bbrace{1,2};//(4)}(4)中brace的构造清晰明确地调用了(2)。在clang中,(3)中paren的构造明确地调用(1),而在gcc5.2中,它无法编译:main.cpp:Infunction'intmain()':main.cpp:11:19:error:callofoverloaded'B()'isambiguousBparen({1,2});^main.c