草庐IT

implicit-conversion

全部标签

C++:如何检查所有单参数构造函数是否都是显式的

是否有一个程序可以扫描整个项目并报告所有符合隐式转换条件的构造函数?谢谢! 最佳答案 Cppcheck也许能够做到这一点,但我不确定。如果现在不这样做,它将是构建此类功能的理想框架。(此外,如果您还没有使用Cppcheck,请立即开始!免责声明:我是贡献者。) 关于C++:如何检查所有单参数构造函数是否都是显式的,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5736022/

c++ - G++ 警告 : narrowing conversion of

我正在尝试从sourceforge编译hosts3d,它确实编译但生成了几个缩小错误。我不知道如何解决这个问题,但我们将不胜感激任何帮助。我怀疑我可以下载以前版本的编译器,我可能最终会这样做,但现在……c++11g++-Wall-O2-c-osrc/glwin.osrc/glwin.cppsrc/glwin.cpp:成员函数中'intMyGLWin::AddInput(int,int,unsignedint,int,constchar*,bool)':src/glwin.cpp:983:147:warning:narrowingconversionof'max'from'int'to'

c++ - 在 C++ 中防止整数 0 隐式转换为指针的最佳方法是什么

我正在尝试找出防止整数0隐式转换为nullptr_t然后传递给采用指针的构造函数的最佳方法。Explicit不会这样做,但我可以让nullptr_t导致模棱两可的重载错误:#includestructA{explicitA(char*){}};structB{B(nullptr_ta)=delete;B(char*){}};intmain(intargc,char*argv[]){Aa(0);//darnitIcompiled...Bb1(0);//good,fails,butwithonlyb/cambiguousBb2((char*)0);//good,succeedsBb3(1)

c++ - 使用(模板化的)删除函数重载来防止通常的算术转换

我经常发现我想阻止特定构造函数或函数的缩小或符号转换(通常是Usualarithmeticconversions)。我倾向于写:#includevoidfoo(doublef){std::coutvoidfoo(T&&f)=delete;voidbar(unsignedintf){std::coutvoidbar(T&&f)=delete;这样就可以了...intmain(){autoi=2;autod=2.0;autof=2.0f;foo(i);//preventedfoo(d);//OKfoo(f);//preventedautouil=3ull;autoul=3ul;autou=

c++ - 从不同的库中隐式转换相似类型以在 C++ 中无缝地协同工作

我正在使用GLM和BulletPhysics,它们都有自己的vector类型-glm::vec3和btVector3。它们是完全相同的数据结构,但它们让我很烦,因为它们不能很好地结合在一起。必须进行大量手动转换。假设我有一个函数foo(btVector3f)并且我想传递一个glm::vec3作为参数而不用将它转换为btVector3,类似于将constchar*传递给需要std::string的函数,而不必先将其转换为字符串。现在我不想进入这些库中的每一个并手动将operator放入类中,只是为了在我更新库时破坏它(假设他们甚至允许这样做)执照)。我如何在我自己的项目中使一种类型的ve

c++ - Xcode C++ vector : Implicit instantiation of undefined template

我在不同的IDE上运行这段代码,它成功了。出于某种原因,我在Xcode上收到上述错误消息。我假设我缺少某种标题,但我不确定是哪一个。#include#include#include#includeintmain(){vectorlistRestaurants;//error:Implicitinstantiationofundefinedtemplatereturn0;} 最佳答案 Xcode10.2.1向我展示了错误Implicitinstantiationofundefinedtemplate'std::__1::vector,

c++ - 带有转换运算符的类上的 static_cast

我刚刚遇到这种行为,我很难理解为什么这不起作用。enumclassTestEnum{Foo,Bar};classMyClass{public:operatorTestEnum(){returnm_enum;}TestEnumm_enum=TestEnum::Foo;}MyClasstheClass;intenumValue=static_cast(theClass);//doesnotwork,conversionoperatornotcalledintenumValue=static_cast(static_cast(theClass))//worksasexpected我知道编译器

C++ 隐式转换和重载函数调用中的歧义

我面临以下问题:我有一个类V(比如一个vector),我可以从中生成两个类:CI和I(想想const_iterator和迭代器)。如果我有一个constV,那么我只能生成CI(再次想到iterator和const_iterator)。本质上,我想用(CIci)替换(constV&v),用(Ii)替换(V&v)。此外,我仍然希望能够将Vobj直接传递给需要I或CI的函数,从而实现从V和constV到CI和I的隐式转换。我面临的问题是,虽然重载函数可以区分(constV&v)和(V&v),但当我传递Vobj时,它们无法“区分”(CIci)和(Ii)。在代码中:structV{};struc

c++ - ponter 和不同大小的整数类型之间的 reinterpret_cast

当我们执行以下操作时实际发生了什么:1)inti=-1;//32bitvoid*p;p=reinterpret_cast(i)在64位架构上,sizeof(void*)==82)longlongi;//64bitvoid*p=(unsignedint)(-1);i=retinterpret_cast(p)在32位架构上sizeof(void*)=4我大体上知道结果是什么,但我希望有人用C++标准来描述这个机制,以便更好地理解。在第二种情况下,行为类似于“积分促销”(4.5)中描述的行为(我将为-1)对于“int-unsignedlong”的情况,我们通常会说指针像有符号整数一样转换吗?

c++ - 用户自定义转换的第二个标准转换顺序

我对标准转换序列术语有误解。我遇到了以下引用N3797§8.5.3/5[dcl.init.ref]:—Iftheinitializerexpression—isanxvalue(butnotabit-field),classprvalue,arrayprvalueorfunctionlvalueand“cv1T1”isreference-compatiblewith“cv2T2”,or—hasaclasstype(i.e.,T2isaclasstype),whereT1isnotreference-relatedtoT2,andcanbeconvertedtoanxvalue,clas