草庐IT

implicit-conversion

全部标签

c++ - 什么时候加载 DLL : Implicit Linking VS Explicit Linking

我认为隐式链接会在应用程序启动时立即加载DLL,因为它也称为“加载时动态链接”。但是我在下面的链接中发现了一些奇怪的解释(https://msdn.microsoft.com/en-us/library/253b8k2c(VS.80).aspx)。隐式链接Liketherestofaprogram'scode,DLLcodeismappedintotheaddressspaceoftheprocesswhentheprocessstartsupanditisloadedintomemoryonlywhenneeded.Asaresult,thePRELOADandLOADONCALLc

c++ - 在 C++ 中转发引用和转换构造函数

假设我想创建一个函数,通过引用获取左值和右值字符串参数,将它们转换为大写,并将它们打印到标准输出:voidupper_print(std::string&s);voidupper_print(std::string&&s);这工作正常,如下所示:std::strings("Helloworld");upper_print(s);upper_print(std::string("Helloworld"));upper_print("Helloworld");//convertingctorused但是,为了避免冗余,我想改用转发引用:templateupper_print(T&&s);不

c++ - 使用复合赋值运算符解决转换警告

在我们公司,我们制定了使用-Wconversion进行编译的政策,这会产生一些转换警告。虽然我同意这种额外的检查可以防止错误,但在以下情况下看到速记运算符的警告很烦人:uint8_tbyte;byte+=8;//conversionto'uint8_t'from'int'mayalteritsvalue[-Wconversion]现在这可以通过将其重写为byte=(uint8_t)(byte+8)来解决,这反过来会降低代码的可读性。有没有更好的方法来做到这一点? 最佳答案 考虑您收到警告的原因,即整型常量8的类型为int。C中的所有

c++ - 隐式转换和用户定义的转换

当我写这样的代码时:structfoo{operatorint()const{return1;}};intmain(){fooa,b;autotmp=(a它有效,但是当我写这样的代码时:structfoo{operatorstring()const{returnstring("foo");}};intmain(){fooa,b;autotmp=(a编译器(clang++)表示error:invalidoperandstobinaryexpression('foo'and'foo')我想知道为什么,因为两者都是string类型和int类型有比较运算符,但是当foo有用户定义int转换,它

C++ 可变参数模板和隐式转换

我正在尝试弄清楚当可变参数模板构造函数和转换运算符存在时,C++编译器如何解析隐式转换。这是一个最小的例子来说明:当我写的时候:#includeclassA{public:A(){}templateA(tTypes...pArgs){std::cout运行时我得到这个输出:B::operatorA()const.所以它正在使用转换运算符(如我所料)。在线示例http://ideone.com/ZZ2uBz但是当A是一个模板结果是不同的:#includetemplateclassA{public:A(){}templateA(tTypes...pArgs){std::coutoperat

c++ - "Ambiguous conversion sequence"- 这个概念的目的是什么?

在N465916.3.3.1隐式转换序列中说10Ifseveraldifferentsequencesofconversionsexistthateachconverttheargumenttotheparametertype,theimplicitconversionsequenceassociatedwiththeparameterisdefinedtobetheuniqueconversionsequencedesignatedtheambiguousconversionsequence.Forthepurposeofrankingimplicitconversionsequen

c++ - 实现定义的缩小转换?

C++11形式化了缩小转换的概念,并且不允许在列表初始化的顶层使用一个。我想知道是否给定两种类型T和U,它可以由实现定义是否从T转换至U正在缩小。根据我对标准的阅读,是这样的。这是我的推理:根据dcl.init.list(8.5.4)第7段,转换可以缩小的一种方式是,如果它是“从整数类型或无范围枚举类型到整数的隐式转换”不能表示原始类型的所有值的类型”。考虑从unsignedint进行隐式转换至long.关于int的相对大小和long,C++只需要sizeof(int).考虑一个实现A,其中sizeof(int)==sizeof(long).在这个实现中,long不能表示unsigne

c++ - Qt : After installation of VS2012 LNK1123 failure during conversion to COFF

之后我安装了VS2012我的Qt项目不再编译(我的电脑上有VS2010和VS2012)。消息:LNK1123:转换为COFF期间失败:文件无效或损坏。以前只用VS2010没问题。对于VS2012环境,建议(参见SOhere):使用EnableIncrementalLinkingNO编译卸载.net4.5因为我没有将Qt与VS2012结合使用(所以没有插件),所以我不能setuptheprojectasmentioned.我也不能卸载.net4.5(另一个项目需要)。有机会解决这个问题吗?我有一些相关的问题是否可以针对VS2012C++编译器进行编译?Hereitsays为此,我需要自己

c++ - 有没有办法停止隐式指针转换为 void *

我需要在我的源代码中找到所有这样的地方,其中任何类型的指针被隐式转换为void*或停止这些隐式转换的方法。例如:int*到void*char*到void*Base*到void*是否有任何gcc警告或错误标志检测所有此类指针被隐式转换为void*的行? 最佳答案 假设你有一个像这样的简单程序#includeintmain(){char*apples="applesandpears";charfruit[1024];void*avoid;intaint;floatafloat;avoid=&aint;avoid=&afloat;memc

c++ - 在基于策略的类中保留构造的隐性

考虑一个基于策略的智能指针类Ptr只有一个策略可以防止在NULL状态下(以某种方式)取消引用它。让我们考虑2个此类策略:NotNullNoChecking自NotNull政策更具限制性,我们希望允许从Ptr进行隐式转换至Ptr,但不是相反的方向。为了安全起见,那一个必须是明确的。请查看以下实现:#include#include#includestructNoChecking;structNotNull;structNoChecking{NoChecking()=default;NoChecking(constNoChecking&)=default;explicitNoChecking