gpt4 book ai didi

返回中的 C++ 类型转换优先级

转载 作者:行者123 更新时间:2023-11-30 01:52:59 24 4
gpt4 key购买 nike

我有一个代码被更改为在 64 位模式下编译,而之前由于各种原因它在 Win32 中编译。这导致了一些清理工作来解决一些警告,所以我正在挑选代码并找到如下所示的内容:

class foo 
{

public:
int foo() { return data_.size()-1; }

private:
std::vector<int> data_;
};

STL 容器上的 size() 方法返回无符号值。返回值被转换为带符号的整数值,因此在某个时候会发生转换。

虽然我不确定这里的优先级。 size() 返回的值是否会转换为 int,然后减去 1,如果 size 为零,这将导致返回值为 -1?或者我们是否会从无符号整数中减去 1,如果在调用此方法时容器为空,则可能会做坏事?

谢谢!

最佳答案

它将是 unsigned = unsigned - 1;返回有符号(无符号),其中无符号(0)- 1 == 无符号(最大)

来自4.7积分转换

A prvalue of an integer type can be converted to a prvalue of another integer type. A prvalue of an unscoped enumeration type can be converted to a prvalue of an integer type. If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where n is the number of bits used to represent the unsigned type). [ Note: In a two’s complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation). — end note ] If the destination type is signed, the value is unchanged if it can be represented in the destination type (and bit-field width); otherwise, the value is implementation-defined.

因此,任何大于最大有符号值的无符号值都会导致实现定义的行为。

关于返回中的 C++ 类型转换优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23699823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com