jjzjj

c++ - 是否存在检测有符号类型的位移位操作的 GCC 警告?

如果我正确阅读了C++ISO规范(第5.8.2和5.8.3节),负符号类型的右移是特定于实现的,而左移未定义的行为。因此,我想在我们使用g++4.8.2编译的遗留源代码中找到有符号类型的移位操作。很遗憾,我在manual中找不到这样的选项。.例如,我可以使用“g++-Wall-Wextra-pedantic”编译此代码而不会发出警告:intsi=-1;intleft=si>1;//-1(nochange,only1s)谁能告诉我是否有这样的警告,如果没有,为什么gcc不关心它? 最佳答案 AFAIKgcc不提供这样的选择。正如您所引

c++ - 是否存在检测有符号类型的位移位操作的 GCC 警告?

如果我正确阅读了C++ISO规范(第5.8.2和5.8.3节),负符号类型的右移是特定于实现的,而左移未定义的行为。因此,我想在我们使用g++4.8.2编译的遗留源代码中找到有符号类型的移位操作。很遗憾,我在manual中找不到这样的选项。.例如,我可以使用“g++-Wall-Wextra-pedantic”编译此代码而不会发出警告:intsi=-1;intleft=si>1;//-1(nochange,only1s)谁能告诉我是否有这样的警告,如果没有,为什么gcc不关心它? 最佳答案 AFAIKgcc不提供这样的选择。正如您所引

c++ - 在 C++03 中左移有符号整数未定义行为吗?

根据C++03,5.8/2,左移定义如下:ThevalueofE1这里让我困扰的是,明确提到了无符号类型,而有符号类型却被完全忽略了。将此与定义右移的5.8/3进行比较:ThevalueofE1>>E2isE1right-shiftedE2bitpositions.IfE1hasanunsignedtypeorifE1hasasignedtypeandanonnegativevalue,thevalueoftheresultistheintegralpartofthequotientofE1dividedbythequantity2raisedtothepowerE2.IfE1hasa

c++ - 在 C++03 中左移有符号整数未定义行为吗?

根据C++03,5.8/2,左移定义如下:ThevalueofE1这里让我困扰的是,明确提到了无符号类型,而有符号类型却被完全忽略了。将此与定义右移的5.8/3进行比较:ThevalueofE1>>E2isE1right-shiftedE2bitpositions.IfE1hasanunsignedtypeorifE1hasasignedtypeandanonnegativevalue,thevalueoftheresultistheintegralpartofthequotientofE1dividedbythequantity2raisedtothepowerE2.IfE1hasa

c++ - 当我混合有符号和无符号类型时会发生什么?

我正在学习C++语言,我对类型转换有些疑问,你能解释一下在这样的表达式中会发生什么吗:unsignedintu=10;inta=-42;std::cout在这里我知道,如果我在有两个数学运算符时应用规则,结果将是52。但是我想知道当编译器将a转换为无符号值时会创建一个无符号类型的临时值时会发生什么,之​​后会发生什么?现在的表达式应该是10-4294967254。 最佳答案 简单来说,如果你混合相同等级的类型(按int、longint、longlongint的顺序),无符号类型“获胜”,并且在该无符号类型中执行计算。结果是相同的无符

c++ - 当我混合有符号和无符号类型时会发生什么?

我正在学习C++语言,我对类型转换有些疑问,你能解释一下在这样的表达式中会发生什么吗:unsignedintu=10;inta=-42;std::cout在这里我知道,如果我在有两个数学运算符时应用规则,结果将是52。但是我想知道当编译器将a转换为无符号值时会创建一个无符号类型的临时值时会发生什么,之​​后会发生什么?现在的表达式应该是10-4294967254。 最佳答案 简单来说,如果你混合相同等级的类型(按int、longint、longlongint的顺序),无符号类型“获胜”,并且在该无符号类型中执行计算。结果是相同的无符

c++ - 如何为有符号整数类型创建用户定义的文字?

正如我从thispost中发现的那样用户定义的文字类型允许的参数类型如下:constchar*unsignedlonglongintlongdoublecharwchar_tchar16_tchar32_tconstchar*,std::size_tconstwchar_t*,std::size_tconstchar16_t*,std::size_tconstchar32_t*,std::size_t嗯,我在该列表中看到的唯一有符​​号整数是char,它太小了。如果我想做这样的事情怎么办:stroperator""_i(inti){returni*2;}然后,当我编写-1000_i时,

c++ - 如何为有符号整数类型创建用户定义的文字?

正如我从thispost中发现的那样用户定义的文字类型允许的参数类型如下:constchar*unsignedlonglongintlongdoublecharwchar_tchar16_tchar32_tconstchar*,std::size_tconstwchar_t*,std::size_tconstchar16_t*,std::size_tconstchar32_t*,std::size_t嗯,我在该列表中看到的唯一有符​​号整数是char,它太小了。如果我想做这样的事情怎么办:stroperator""_i(inti){returni*2;}然后,当我编写-1000_i时,

c++ - typedef 用于可以包含 size_t 的有符号类型?

对于可以包含所有size_t值的带符号类型,是否有标准(或MSVC专有)typedef?IE。在64位系统上,它将是一个128位有符号整数。 最佳答案 通常不可能定义这样的类型。实现size_t是完全合法的。支持的最大无符号类型,这将(几乎可以肯定)意味着没有有符号类型可以保存其所有值。ptrdiff_t不一定足够宽。这是两个指针相减的结果,但没有什么说指针减法不会溢出。请参阅C++标准的第5.7节:Whentwopointerstoelementsofthesamearrayobjectaresubtracted,theresul

c++ - typedef 用于可以包含 size_t 的有符号类型?

对于可以包含所有size_t值的带符号类型,是否有标准(或MSVC专有)typedef?IE。在64位系统上,它将是一个128位有符号整数。 最佳答案 通常不可能定义这样的类型。实现size_t是完全合法的。支持的最大无符号类型,这将(几乎可以肯定)意味着没有有符号类型可以保存其所有值。ptrdiff_t不一定足够宽。这是两个指针相减的结果,但没有什么说指针减法不会溢出。请参阅C++标准的第5.7节:Whentwopointerstoelementsofthesamearrayobjectaresubtracted,theresul