- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想到了 C 和 bool< 中的
在 C++ 中。_Bool
/bool
(stdbool.h
) 类型
我们使用 boolean 类型来声明对象,该对象只能保存 0 或 1 的值。例如:
_Bool bin = 1;
或
bool bin = 1;
(注:bool
是stdbool.h
头文件中_Bool
的宏。)
在 C 语言中,
或
bool bin = 1;
在 C++ 中。
<小时/>但是 _Bool
和 bool
的 boolean 类型真的有效吗?
我做了一个测试来确定内存中每个对象的大小:
对于C:
#include <stdio.h>
#include <stdbool.h> // for "bool" macro.
int main()
{
_Bool bin1 = 1;
bool bin2 = 1; // just for the sake of completeness; bool is a macro for _Bool.
printf("the size of bin1 in bytes is: %lu \n",(sizeof(bin1)));
printf("the size of bin2 in bytes is: %lu \n",(sizeof(bin2)));
return 0;
}
输出:
the size of bin1 in bytes is: 1
the size of bin2 in bytes is: 1
对于 C++:
#include <iostream>
int main()
{
bool bin = 1;
std::cout << "the size of bin in bytes is: " << sizeof(bin);
return 0;
}
输出:
the size of bin in bytes is: 1
<小时/>
因此, boolean 类型的对象确实存储在内存中的 1 个字节(8 位)内,而不是通常只需要一个 1 位。
这里讨论原因:Why is a char and a bool the same size in c++? 。这不是我的问题。
<小时/>我的问题是:
为什么我们在 C 和 bool< 中使用
在 C++ 中,如果它们不提供内存存储方面的好处,因为它是专门假装使用这些类型的?_Bool
/bool
(stdbool.h
) 类型
为什么我不能只使用 int8_t
或 char
类型(假设 char
包含 8 位(其中通常是这样)在具体实现中)改为?
是否只是为了给代码读者提供明显的印象,即各个对象用于 0
或 1
/true
或仅用于 false
目的?
非常感谢您的参与。
最佳答案
Why do we use the types of _Bool/ bool (stdbool.h) in C and bool in C++, if they do not provide a benefit in memory storage, as it is specificially pretended for use these types?
您已经在问题中提到了原因:
We use the boolean types to declare objects, that only shall hold the values of 0 or 1
专门使用 boolean 数据类型的优点是因为它只能表示 true 或 false。其他整数类型具有更多可表示的值,当您只需要两个时,这是不希望的。
Why can´t I just use the types of int8_t or char (assuming char is contained of 8 bit (which is usually the case) in the specific implementation) instead?
你可以。事实上,C 直到 C99 标准才出现 boolean 数据类型。请注意使用 int8_t
的缺点是不保证所有系统都提供。和问题 char
是它可以是签名的或未签名的。
但您不需要这样做,因为您可以使用 boolean 数据类型。
<小时/>This implies that there is difference when I use trueor false with boolean types in comparison to when I use these with char or int8_t. Could you state this difference?
考虑以下简单示例:
int8_t i = some_value;
bool b = some_value;
if (i == true)
if (i)
if (b == true)
if (b)
对于int8_t
,这两个条件有不同的行为,如果选择了错误的形式,就会为错误的行为创造机会。对于 boolean 值,它们具有相同的行为,并且没有错误的选择。
附注如果你想紧凑地存储多个 boolean 值(以每次读写多条指令为代价),你可以使用 std::bitset
或std::vector<bool>
例如。在 C 中,没有类似的标准库实用程序,但此类功能可以通过移位和屏蔽来实现。
关于c++ - 为什么使用 _Bool 和 bool 而不是 int8_t 或 char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59861976/
根据在线文档,这些固定宽度整数类型之间存在差异。对于 int*_t,我们将宽度固定为 * 的值。然而对于其他两种类型,描述中使用形容词最快和最小来请求底层数据模型提供的最快或最小实例。 “最快”或“最
我是 Python 注释的新手(类型提示)。我注意到 pyi 中的许多类定义文件继承到 Generic[_T] , 和 _T = TypeVar('_T') . 我很困惑,_T 是什么意思?这里的意思
这个问题在这里已经有了答案: How to use a variable inside a _T wrapper? (3 个答案) 关闭 7 年前。 我有以下代码: CString port = m
要包含 _T() 宏,我应该包含什么文件?它转换我认为的文本文字。我以为它是 windows.h,但我已经包含了它。 令人惊讶的是,我无法在 Google 上找到答案。 最佳答案 我在主题 Unico
类型的后缀 _t 由 POSIX 保留,但是如果我在自己的命名空间中使用 _t 后缀定义自己的类型怎么办? 最佳答案 我同意 user6366161 的 answer,其中说“C 对 namespac
我知道 size_t 有 _t 后缀,因为它的别名/typedef。但是我不明白为什么 char16_t, char32_t 和 wchar_t 包含 _t 后缀。 最佳答案 对于 wchar_t :
我想让这个字符串的主机名部分可变..目前,它只修复了这个 URL: _T(" --url=http://www.myurl.com/ --out=c:\\current.png"); 我想做这样的东西
这个问题在这里已经有了答案: convert string to _T in cpp (6 个答案) 关闭 7 年前。 string pagexx = "http://website.com/" +
我有一个注册为 COM 对象的 .net 库,当在 C++ 项目中导入 .tlb 文件时,我得到这样的方法声明 virtual HRESULT __stdcall GetBid ( /*[
我现在遇到了很多 Unicode 问题。据我了解,TCHAR 被定义为 wchar_t 或 char,具体取决于 _UNICODE 是否在某处定义,并且还有各种其他功能可以帮助解决这个问题。显然 _T
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我正在尝试使用 _t() 方法翻译一个 DataObject。 我一直在 Pages 上使用它没有问题,但它似乎不适用于数据对象。 class SliderItem extends DataObjec
关于保留 _t 结尾名称的规则是否也适用于作用域名称(例如,在 namespace 或类中定义的类型和类型定义),还是仅适用于全局 namespace 中的类型和类型定义?标准 C/C++ 库或 PO
我确定以前有人问过这个问题,但我无法搜索到文本。如果有人可以解释它们,请给我推荐一篇文章,或者给我正确的搜索查询,我将不胜感激。 谢谢。 最佳答案 这只是一种预感,但看看 Wikipedia C++1
我有一个 UNICODE 应用程序,我们使用 _T(x) 定义如下。 #if defined(_UNICODE) #define _T(x) L ##x #else #define _T(x) x #
我一直想知道是否存在任何命名约定,例如何时对类型使用 ALLCAPS 以及何时附加 _t(以及何时不使用任何东西?)。我知道以前 K&R 发布了各种关于如何使用 C 的文档,但我找不到任何相关内容。
这似乎是一个简单的问题,但我无法通过 Stack Overflow 搜索或 Google 找到它。类型后跟 _t 是什么意思?比如 int_t anInt; 我在 C 代码中经常看到它与硬件密切相关—
C++ 有时使用后缀 _type关于类型定义(例如 std::vector::value_type ),有时_t (例如 std::size_t ),或者没有后缀(普通类,还有像 std::strin
字符串中的“T”代表什么。例如 _T("Hello")。我在需要 unicode 支持的项目中看到了这一点。它实际上告诉处理器什么 最佳答案 _T 代表“文本”。当且仅当您使用 Unicode 支持编
我的代码可以根据 C++ 类型识别您需要使用的 GL 类型。我想制作它的 _t 版本(如 std::decay_t 或 std::enable_if_t)但公开 int常量值 template st
我是一名优秀的程序员,十分优秀!