草庐IT

implicit-conversion

全部标签

c++ - 如何避免 'implicit' 在 std::pair 中调用单参数构造函数

最初的问题是如何使用std::map>以一种安全的方式,因为相同类型的键和值非常容易出错。所以我决定为这个值创建一个简单的包装器:structComponentName{std::wstringname;//Iwanttoprohibitanyimplicitstring-ComponentNameconversions!!!explicitComponentName(conststd::wstring&_name):name(_name){}booloperatorcomponent_names_map;但是下面的代码运行良好!component_names_mapcomponent

c++ - 常量不匹配 : 2 overloads have no legal conversion for 'this' pointer

我收到了这个奇怪的错误:errorC2663:'sf::Drawable::SetPosition':2overloadshavenolegalconversionfor'this'pointer我认为这与const不匹配有关,但我不知道在哪里,或者为什么。在下面的代码中,我有一个形状和Sprite的vector,当尝试访问其中一个vector形状并调用它的一个函数时,我遇到了错误。std::vectorShapes;std::vectorSprites;boolAddShape(sf::Shape&S){Shapes.push_back(S);returntrue;};boolAdd

c++ - 常量不匹配 : 2 overloads have no legal conversion for 'this' pointer

我收到了这个奇怪的错误:errorC2663:'sf::Drawable::SetPosition':2overloadshavenolegalconversionfor'this'pointer我认为这与const不匹配有关,但我不知道在哪里,或者为什么。在下面的代码中,我有一个形状和Sprite的vector,当尝试访问其中一个vector形状并调用它的一个函数时,我遇到了错误。std::vectorShapes;std::vectorSprites;boolAddShape(sf::Shape&S){Shapes.push_back(S);returntrue;};boolAdd

C++,bool 转换是否总是退回到 void* 的隐式转换?

问题:隐式bool转换是否总是回退到尝试隐式转换为void*?(如果该类型存在这样的转换函数)。如果有,为什么?考虑以下短程序:#includeclassFoo{public:operatorvoid*()const{std::cout这个程序的输出是:operatorvoid*()constFalse意思是调用void*的转换函数。如果我们在转换函数前面标记explicit限定符,那么到void*的隐式转换将失败。编辑:似乎很多答案是“空指针可以转换为false”。我明白这一点,我的问题是关于“如果我不能直接调用operatorbool()那么我将尝试转换为任何指针”。

C++,bool 转换是否总是退回到 void* 的隐式转换?

问题:隐式bool转换是否总是回退到尝试隐式转换为void*?(如果该类型存在这样的转换函数)。如果有,为什么?考虑以下短程序:#includeclassFoo{public:operatorvoid*()const{std::cout这个程序的输出是:operatorvoid*()constFalse意思是调用void*的转换函数。如果我们在转换函数前面标记explicit限定符,那么到void*的隐式转换将失败。编辑:似乎很多答案是“空指针可以转换为false”。我明白这一点,我的问题是关于“如果我不能直接调用operatorbool()那么我将尝试转换为任何指针”。

c++ - C++ 隐式转换原语的警告或错误

我对一些C++代码进行了一些重度重构,并发现了许多由我不知道的隐式转换引起的错误。示例structA*a();boolb(){returna();}voidc(){int64_tconstd(b());}问题在b中,a的返回类型被默默地转换为bool。在c中,从b返回的值被静默提升为int64_t。问题我如何才能收到原始类型之间隐式转换的警告或错误?注意-Wconversion的使用似乎只选择了几个与上述示例无关的任意转换。BOOST_STRONG_TYPEDEF不是一个选项(我的类型需要是POD,因为它们用于磁盘结构中)。C也很有趣,但是这个问题与C++代码库有关。

c++ - C++ 隐式转换原语的警告或错误

我对一些C++代码进行了一些重度重构,并发现了许多由我不知道的隐式转换引起的错误。示例structA*a();boolb(){returna();}voidc(){int64_tconstd(b());}问题在b中,a的返回类型被默默地转换为bool。在c中,从b返回的值被静默提升为int64_t。问题我如何才能收到原始类型之间隐式转换的警告或错误?注意-Wconversion的使用似乎只选择了几个与上述示例无关的任意转换。BOOST_STRONG_TYPEDEF不是一个选项(我的类型需要是POD,因为它们用于磁盘结构中)。C也很有趣,但是这个问题与C++代码库有关。

c++ - 三元运算符的奇怪隐式转换

我有以下代码:classA{public:operatorint()const{return5;}};classB{public:operatorint()const{return6;}};intmain(){Aa;Bb;intmyInt=true?a:b;return0;}尝试使用VisualStudio2017RC编译该代码会导致以下错误:errorC2446:::noconversionfromBtoAnote:Nouser-defined-conversionoperatoravailablethatcanperformthisconversion,ortheoperatorc

c++ - 三元运算符的奇怪隐式转换

我有以下代码:classA{public:operatorint()const{return5;}};classB{public:operatorint()const{return6;}};intmain(){Aa;Bb;intmyInt=true?a:b;return0;}尝试使用VisualStudio2017RC编译该代码会导致以下错误:errorC2446:::noconversionfromBtoAnote:Nouser-defined-conversionoperatoravailablethatcanperformthisconversion,ortheoperatorc

c++ - return 语句何时需要显式 move ?

在commenttoanotherquestion中JonathanWakely回应我的声明:Youneverneedexplicitmoveforalocalvariablefunctionreturnvalue.It'simplicitmovethere->...neversaynever...Youneedanexplicitmoveifthelocalvariableisnotthesametypeasthereturntype,e.g.std::unique_ptrf(){autop=std::make_unique();p->foo();returnp;},butifthe