草庐IT

c++ - 显式/隐式类型转换 C++

我有一行代码doublei=1+(long)1.5*5.0f我的问题是转换顺序和结果是什么?一直在寻找这样的例子,但无济于事。有什么好的指南可以帮助我理解它吗? 最佳答案 Myquestioniswhatistheconversionorderandtheresult?转换应用于1.5,给出一个long,值为1。将其转换为float以与5.0f相乘,得到值为5.0f的float。1被转换为float以与该值相加,得到一个float值为6.0f。最后,将其提升为double(保留值6.0)以分配给i。这假定了一种可以精确表示小整数的非

c# - C#中的隐式类型转换

我正在将C++程序移植到C#。我刚开始学习C#。在C++中,如果我定义一个带字符串参数的构造函数classProgramOption{public:ProgramOptions(constchar*s=0);};然后我可以使用字符串参数代替ProgramOptions,例如intmyfucn(ProgramOptionpo);myfunc("s=20;");我也可以将它用作默认参数,例如,intmyfunc(ProgramOptionpo=ProgramOption());不幸的是在C#中,即使我有classProgramOption{publicProgramOptions(cons

C++:模板中的隐式转换,为什么它不起作用?

这看起来很奇怪,但是这段简单的代码适用于int而不是T,并且不适用于模板T。templateclassPolynomial{public:Polynomial(Ti){}Polynomial&operator+=(constPolynomial&rhs){return*this;}};templateconstPolynomialoperator+(Polynomiallhs_copy,constPolynomial&rhs){returnlhs_copy+=rhs;}Polynomialx(1),y=x+2;//nomatchfor'operator+'in'x+2'

C++:隐式转换顺序

我有一个像这样重载的(成员)函数:boolfoo(bool);intfoo(int);floatfoo(float);...std::stringfoo(std::stringconst&);用于一些内置类型,但不适用于constchar*。调用foo("beautyisonlyskin-deep");,令我大吃一惊的是,调用了foo函数的bool变体。这引出了我的问题:问题:是否有明确定义的内置类型隐式转换顺序不是问题:如何避免隐式转换。隐式转换是多么邪恶。...编辑:删除了关于用户定义问题的隐式转换顺序的问题 最佳答案 根据:h

c++ - 在 std::bind 中使用 std::bind :编译错误(隐式转换)

这个问题在这里已经有了答案:std::bindaboundfunction(2个答案)关闭6年前。当我想创建一个std::function来包装work(..)成员时,我遇到了一个让我很累的编译错误。示例代码:classC{public:C(){std::functionf=std::bind(&C::work,this,std::bind(&C::step1,this),std::bind(&C::step2,this));QListlst;lst.append(f);.....}private:voidwork(std::functionfn1,std::functionfn2){

c++ - 隐式模板推导指南可以推导引用类型吗?

在使用gcc7测试C++17推导指南行为时,我发现这个例子失败了:templatestructS{S(T&&v){}};inti=10;autov=S(i);根据我从cppreference读到的内容,我以为v应该是S类型.然而gcc7不编译此代码提示int&不能绑定(bind)到int&&(通用引用机制失效)。所以我的问题是:gcc7应该推导出v类型为S?工作草案标准中哪里描述了自动扣除指南? 最佳答案 [over.match.class.deduct]中的规则是:Asetoffunctionsandfunctiontemplat

c++ - boost::optional<std::string> 和来自 char[] 的隐式构造函数

我已经习惯了通过让编译器找出所涉及的魔法来以下列方式初始化std::stringsstd::stringmy_string="hello";以下将不起作用,因为两种类型之间没有显式转换:boost::optionalmy_optional_string="hello";但这确实有效:boost::optionalmy_optional_string=std::string("hello");现在,难道没有办法菊花链隐式调用的单参数构造函数以允许第二种形式吗?我问的原因(虽然我不想用细节打扰你)是有一大堆类需要填充可选成员。必须显式输入所有内容似乎是一种负担(我不太担心自己,但我正在开发

c++ - 隐式构造函数可用于从 Base 派生的所有类型,但当前类型除外?

以下代码总结了我的问题:templateclassBase{};templateclassDerived1:publicBase{};templateclassDerived2:publicBase{public://CopyconstructorDerived2(constDerived2&x);//AnEXPLICITconstructorthatdoesaspecialconversionforaDerived2//withothertemplateparameterstemplateexplicitDerived2(constDerived2&x);//Nowtheproble

c++ - 显式移动构造函数是否消除了隐式复制构造函数?

我阅读了接受的答案here那:[a]copyconstructorandcopyassignmentoperatorwon'tbegeneratedforaclassthatexplicitlydeclaresamoveconstructorormoveassignmentoperator我确实注意到(g++4.7.2)如果您定义了一个移动构造函数,它将与例如push_back()一起使用,而如果您所做的只是=delete复制构造函数,你没有得到隐式移动构造函数——你得到一个错误。[...这让我想知道如果您没有明确地做任何事情,实际使用的是哪一个(移动或复制)...]然而,thison

c++ - 将可选的隐式转换为 bool 值?

我正在阅读一些代码,但遇到了一些我不明白的事情。它是关于测试Boost::optional值是否被初始化的。它使用提供ASSERT_TRUE()宏的gtest框架。#include"gtest\gtest.h"voidtest(){boost::optionalopt=someFunc();ASSERT_TRUE(!!opt);}为什么在opt之前需要!!?boost::optional是否未隐式转换为宏所需的bool值?我认为使用ASSERT_TRUE(opt)来检查opt是否持有正确的值就足够了吗? 最佳答案 Isaboost: