草庐IT

implicit-conversion

全部标签

c++ - 在用它执行算术时隐式地将对象转换为浮点类型

假设我们有一个全局对象pi,我们想根据上下文将其隐式转换为float或double。以下不起作用:#includeclassPi{public:Pi(){}operatorfloat()const{returnstd::atan(1.0f)*4.0f;}operatordouble()const{returnstd::atan(1.0)*4.0;}};constPipi;#include#includeintmain(){std::cout它不起作用的原因是编译器不知道它是否应该将pi隐式转换为float或double.但是,假设我们总是希望它在二元算术运算符中转换为另一个操作数的类型

C++:将元组转换为类型 T

我正在尝试创建一个名为tuple_cnv的类,它带有一个(隐式)转换运算符以从元组构造任何对象(如C++17std::make_from_tuple函数),但具有递归性质,以这种方式,如果一个元组由其他元组组成,它会将任何“内元组”转换为tuple_cnv以允许递归就地构造目标类型:#include#include#include#includestructA{inti1,i2,i3;};structB{Aa1,a2;};templatestructtuple_cnv;templatestructtuple_cnv>{usingtuple_t=std::tuple;std::refer

c++ - 编译器错误 : ‘std::array<...>::~array()’ is implicitly deleted

我有以下.hpp文件:#ifndefCODE_HPP#defineCODE_HPP#include#includeusingstd::vector;usingstd::array;template>classstack;template,typenameK=stack>classstack_array;templateclassstack{Cpile;stack();~stack();voidpush(T&);friendclassstack_array>;};templateclassstack_array{private:staticconstsize_tmax_elem=10;a

c++ - 当发生隐式转换时,对象会失去常量性吗?

我做了一个小实验,但我不明白输出结果!classC{public:operatorint()const{std::cout为什么输出"i'mnotconst"?C对象的第一个转换(它是一个右值,因此是const)不应该是优先的吗?谢谢!:)编辑:如果它可以使问题更精确:相比之下:voidg(Cconst&){std::coutg(C())outputs"Itakeaconst". 最佳答案 临时的不是常量:C();//notconst如果你想经常引用它,就强制转换它:f(static_cast(C()));关键是调用其成员函数(这里

C++ 类型转换与隐式构造函数

我正在实现一个表示分数的C++类。这是我的代码。classFraction{public:Fraction(chari);Fraction(inti);Fraction(shorti);Fraction(longintl);#ifdef__LP64__Fraction(longlongl);#endifFraction(floatf);Fraction(doubled);Fraction(doublex,doubley);Fractionoperator+()const;Fractionoperator-()const;Fraction&operator+=(constFraction

c++ - 自动转换错误

classSample{public:Sample();Sample(inti);Sample(Sample&s);~Sample();};Sample::Sample(){cout我期望隐式转换为5。但是,当我编译上面的代码时,出现以下错误:main.cpp:7:8:error:nomatchingfunctionforcallto‘Sample::Sample(Sample)’main.cpp:7:8:note:candidatesare:Sample.h:10:3:note:Sample::Sample(Sample&)Sample.h:10:3:note:noknownconv

c++ - 是否可以为 std::array 定义隐式转换运算符?

我正在尝试拥有一个可以隐式转换为std::array的C++类。转换有效,但不是隐式的。#includeclassA{private:std::arraydata;public:operatorstd::array&(){returndata;}operatorconststd::array&()const{returndata;}};intmain(){Aa;a[1]=0.5f;//failstocompileautoit=a.begin();//failstocompileAb;static_cast>(b)[1]=0.5f;//okautoit2=static_cast>(b).

c++ - 为什么显式运算符 bool 让我转换为任何原始类型?

structtest{explicitoperatorbool()const{returntrue;}};intmain(){testa;floatb=static_cast(a);//b=1}这是正确的,还是一个VS错误?如果按照设计,这里的最佳做法是什么?我应该/可以做些什么来防止这种情况发生吗? 最佳答案 这看起来像一个VS错误:显式运算符不应该应用于bool以外的类型。在这两个C++11mode中都无法在gcc中编译和C++98mode.CanIdoanythingtopreventthis?您已经完成了您需要做的事情-这是

C++构造函数隐式转换没有发生

我定义了一个A类classA{public:A(int){}private:A(constA&);A&operator=(constA&);};我认为既然我从int中给出了一个构造函数,隐式构造被授予......不管怎样AmyA(7);工作正常,g++在这一行给我:AmyA=7;以下错误:Test02.cpp:Infunction‘intmain(int,char**)’:Test02.cpp:5:3:error:‘A::A(constA&)’isprivateTest02.cpp:12:12:error:withinthiscontext相反,另一个编译器对这种转换很满意。真相在哪里

c++ - 为什么(删除的)复制构造函数优于隐式转换?

考虑下面的代码:structBar{};structFoo{Foo()=default;Foo(constBar&){}Foo(constFoo&)=delete;//IMPLICITconversiontoBaroperatorBar(){return{};}};intmain(){Foof1;Foof2(static_cast(f1));//thisisOKFoof3(f1);//doesnotcompile,whynotimplicitconversionto`Bar`?}类Bar有一个用户定义的转换运算符到Foo,它接受Bar&。然而,在main的最后一行,我希望Foof1被转