草庐IT

conditional-operator

全部标签

c++ - 为什么以下不调用重载的 operator== (const String &, const String &)? "cobble"== "stone"

为什么以下不调用重载的operator==(constString&,constString&)?"cobble"=="stone" 最佳答案 因为在C++中,字符串字面量是constchar[]类型(也叫以零结尾的字符串常量),而不是std::string,更不用说String(无论是什么)。有一个内置的operator==通过比较它们的地址来比较两个char*。由于数组可隐式转换为指向其第一个元素的指针(由于,您猜对了,C继承),此运算符介入,您比较的是这些文字在内存中的地址。假设您的String类具有来自constchar*(

c++ - 重载 << 运算符错误 C2804 : binary 'operator <<' has too many parameters

这是我的类(class):#ifndefCLOCK_H#defineCLOCK_Husingnamespacestd;classClock{//MemberVariablesprivate:inthours,minutes;voidfixTime();public://Getter&settormethods.voidsetHours(inthrs);intgetHours()const;voidsetMinutes(intmins);intgetMinutes()const;//ConstructorsClock();Clock(int);Clock(int,int);//CopyC

c++ - 我应该担心 "Conditional jump or move depends on uninitialised value(s)"吗?

如果您使用过Memcheck(来自Valgrind),您可能会熟悉这条消息...Conditionaljumpormovedependsonuninitializedvalue(s)我读过这方面的内容,它只会在您使用未初始化的值时发生。MyClasss;s.DoStuff();这会起作用,因为s是自动初始化的...所以如果是这种情况,并且它起作用了,为什么Memcheck告诉我它未初始化?应该忽略该消息吗?也许我误解了错误指向我的位置。从Valgrind手册中,实际的错误片段是......intmain(){intx;printf("x=%d\n",x);}但是,在我的代码中,我看不到

C++ 重载 : Overloading the [][] operator

这个问题在这里已经有了答案:Operator[][]overload(17个答案)关闭6年前。问题是是否可以重载[][]。在像vector>这样的正常情况下,我们正在重载[]运算符。但是在如果为[][]定义特殊含义的情况下是否可以有这样的运算符

c++ - 是否有针对 "conditional expression is constant"的 gcc 警告?

我继承了一个相当大的代码库,其中有人以某种方式编写了几个这样的条件:enum{FOO_TYPE_A,FOO_TYPE_B,FOO_TYPE_C,FOO_TYPE_D};voidbar(intfooType){if(fooType==FOO_TYPE_A||FOO_TYPE_B)//条件检查应该明确在哪里:if(fooType==FOO_TYPE_A||fooType==FOO_TYPE_B)在gcc中有没有警告我可以打开找到它们,类似于MSDN的C4127?具体来说,我使用的是AndroidNDKr9d。如果不是,为什么不呢?对于无意赋值,unsigned>0以及上述愚蠢行为,这似乎是

c++ - 返回空指针的用户定义的 operator new

我知道那里有相当多的C++常见问题解答(以及关于SO的答案)说没有必要检查普通new表达式的返回值是否为null,因为普通new表达式通过抛出异常来指示失败。他们基本上声明普通的new表达式永远不会返回null。(“普通新表达式”是指不是nothrow的新表达式)。然而,尽管这看起来像是一个非常基本的问题,但我突然意识到我不明白他们在给出答案时所做的具体假设(如果有的话)。特别是,我想知道是否允许我重载::operatornew的基本普通形式以始终返回空指针,因此期望所有使用该运算符的普通new表达式都将现在也返回空指针。根据语言规范,如果我的::operatornew被声明为非抛出,

c++ - 使用 std::istream::operator>> 处理无符号类型,我如何区分下溢提取失败?

我想使用std::istream::operator>>将数据提取为无符号类型(在模板内,因此它可以是ushort、uint等)。具体来说,我使用std::stringstream来解析通过std::getline()调用从文件中提取的std::string行。因为我正在从文件中读取数据,所以这些提取可能会因不同的原因而失败:下溢、溢出和“提取不当”。这种情况由STL处理:Ifextractionfails,zeroiswrittentovalueandfailbitisset.Ifextractionresultsinthevaluetoolargeortoosmalltofitin

c++ - 重载 operator= 在模板类中

templateClassA{...ClassA&operator=(constClassA&);...};//caseone:templateClassA&ClassA::operator=(constClassA&rhs){...}//casetwo:templateClassA&ClassA::operator=(constClassA&rhs){...}我假设情况一是正确的。问题>为什么我们不必使用ClassA在函数参数列表中比如情况二? 最佳答案 如您所见,任一版本都可以。一旦我们通过了ClassA::的一部分ClassA

c++ - 为什么需要用 std::string::operator+() 显式调用 Myclass::operator string()?

考虑下面的代码。我不明白为什么我的GCC编译器不尝试隐式使用Myclass::operatorstring(),尽管定义了Myclass::operatorstring():#includeusingnamespacestd;structT{};Toperator+(constT&a,constT&b){}structMyclass{operatorstring()const{}operatorT()const{}};intmain(){Ta;stringb;Myclassc;c+a;//OKc.operatorstring()+b;//OKc+b;//NotOK/*Theabovel

c++ - 将外部错误代码映射到 std::error_condition

我正在考虑修改MS结构化异常到异常映射代码,我们必须使用新的C++11error_code/error_condition/exceptionmechanisim.我的理解是,一般的哲学是您应该首先尝试将错误代码映射到std::error_condition代码,否则,制作您自己的自定义error_condition代码。我看到的问题是std::errc非常适合处理POSIX错误。如果我从源代码中获取的代码与典型的操作系统调用具有完全不同的错误范围,那么它就不能很好地映射。例如,我们取Microsoft'sSEHcodes.这些来自操作系统,所以理论上它应该映射以及POSIX之外的任何