C++ 中有符号、有符号 int 和 int 之间的区别?

Difference between signed, signed int and int in C++?

C++中intsigned intsigned的数据类型有区别吗?


并且: 如果它们在内存中处理所有相同数量的 space (它们在内存分配的上下文中是等效的),那么在 compile-/run-time 之间是否存在性能差异(当然不会对于像下面这样的程序很重要但是在初始化数百个该类型的变量时)?


我对其中任何一个进行了测试,以查看是否存在任何显着差异或任何编译器警告或错误:

signed int:

#include <iostream>

int main()
{
    signed int a = 5;
    std::cout << "The number entered is " << a << std::endl;

    return 0;
}

int:

#include <iostream>

int main()
{
    int a = 5;
    std::cout << "The number entered is " << a << std::endl;

    return 0;
}

signed:

#include <iostream>

int main()
{
    signed a = 5;
    std::cout << "The number entered is " << a << std::endl;

    return 0;
}

所有测试的输出都是等效的:

The number entered is 5

但这并不意味着它在内存存储和性能方面必须相同。

提前致谢。

您可以阅读有关指定整数类型的规则 here

第一个相关规则是,如果您不提供 signedunsigned,编译器将假定 signed.

signed - target type will have signed representation (this is the default if omitted)

另一个规则是,如果您提供 signedunsigned 而没有大小,则假定为 int。所以 intsigned intsigned 在功能上完全等价。

int - basic integer type. The keyword int may be omitted if any of the modifiers listed below are used.

编辑:您可以使用 sizeof operator (ex. sizeof(int) or sizeof(a)) and the range of values a numeric type can represent using std::numeric_limits(例如 std::numeric_limits<int>::max())检查类型的大小(以字节为单位)。

Is there a difference between the datatypes of int, signed int and signed in C++?

没有

这些类型完全相同。每个 Table 12: simple-type-specifiers and the types they specify signedsigned intint 都有类型 int

唯一可以应用 signed 但不适用于 (signed T == T) 的整数类型是 char。有 char 类型 charsigned char 类型 signed char。如果在您的实现中 char 被实现为 signed char 代码,例如

static_assert(std::is_same_v<char, signed char>)

将始终触发断言,因为即使它被实现为 signed char,因为 char 本身是它自己的不同类型,只会与 char 进行相同的比较。