基元类型限制安全性
Primitive types limit safety
考虑到我正在编译器一个 32 位应用程序(即使它不会改变任何东西),这段代码安全吗?
cout << (numeric_limits<unsigned int>::max() + 1) << endl;
它打印"0",但确实影响了另一个变量的一点?假设我有一个包含以下位的字节(char),然后我添加 1:1111 1111 (255)。结果是"1 0000 0000"(256),并且 CPU 只会读取最后 8 位作为我的变量,还是只是重置位序列?
C++标准草案,§3.9.1.4 要求
声明为无符号的无符号整数应遵循算术模 2 n 定律,其中n 是该特定大小整数的值表示中的位数。
因此,按照模算术定律的要求,您的问题中的代码需要输出 0。
请注意,上面提到的规则不适用于char
,因为它没有声明unsigned
(您需要改用unsigned char
)。
无符号整数类型遵循算术模 2^N 定律。在这种情况下,结果将始终为 0,并且不会覆盖其他内存。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 是仅使用get或toplown的原始类型的线程安全性的威胁
- 使用固定整数类型的安全性
- 在类型安全性的同时,初始化带有支撑的矩阵类
- 打开模板参数的有效性,以提高类型安全性
- 基元类型限制安全性