C++:布尔类型(bool)详细分析

C++概述

20世纪80年代,AT&T Bell(贝尔)实验室的Bjarne Stroustrup博士及其同事在C语言的基础上成功开发出C++语言。C++语言是一种混合型语言,它保留了C语言所有的优点,同时又增添了面向对象的编程机制,我们可以将C++语言视为C语言的改进和扩展。

基于C语言开发的C++语言兼容C语言,因此用C语言编写的程序基本上可以不做改动地用于C++。相对于C语言,C++语言对C语言的功能做了一定的扩充,同时增添了面向对象编程机制。引入面向对象编程机制,主要是为了提高开发效率。

C++布尔类型(bool)

布尔类型(bool)是C++新增的一种基本数据类型。它的名称来源于英国数学家George Boole,是他开发了逻辑律的数学表示法。

名称应用环境类型长度取值
bool标准的C++布尔型1个字节false和true(0和1的区别)

C++中的 bool 的取值只有 true 和 false 两种,非零值被转为 true,零被转为 false

#include<iostream>
using namespace std;

int main(){
	bool x = -100, x1 = 30, x2 = 0;
	bool a = false;

	printf("sizeof(a) = %d\n", sizeof(a)); //输出:1 布尔类型为1个字节
	cout << "x值:" << x << endl;
	cout << "x1值:" << x1 << endl;
	cout << "x2值:" << x2 << endl;
	
	return 0;
}

代码生成图:
在这里插入图片描述
在 C++ 中使用 cout 输出 bool 变量的值时还是用数字 1 和 0 表示,而不是 true 或 false。Java、PHP、JavaScript 等也都支持布尔类型,但输出结果为 true 或 false

你也可以使用 true 或 false 显式地对 bool 变量赋值

注意:true 和 false 是 C++ 中的关键字,true 表示“真”,false 表示“假”。

#include <iostream>
using namespace std;

int main(){
    bool flag = true;
    if(flag){
        cout<<"true"<<endl;
    }else{
        cout<<"false"<<endl;
    }

    flag = false;
    if(flag){
        cout<<"true"<<endl;
    }else{
        cout<<"false"<<endl;
    }

    return 0;
}

在这里插入图片描述

  • 11
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
std::atomic_boolC++14中的原子布尔类型。它提供了原子操作,以确保多线程环境下的安全性。它可以用于实现锁、同步和并发算法等。使用std::atomic_bool可以保证对布尔类型的读写操作在多线程环境中是原子的,即不会发生竞态条件。 在C++14中,std::atomic_bool比std::atomic_flag功能更全,可以使用非原子的bool来赋值和初始化。例如,你可以这样使用std::atomic_bool: std::atomic_bool b(true); b = false; 这样就可以对b进行原子的赋值操作。 需要注意的是,std::atomic_flag由于限制性甚至不能用作一个通用的布尔标识,所以最好还是使用std::atomic_bool。在C语言中,也可以使用自旋锁来实现多线程的同步。以下是一个使用自旋锁实现的例子: #include <thread> #include <vector> #include <iostream> #include <atomic> std::atomic_flag lock = ATOMIC_FLAG_INIT; void f(int n) { for (int cnt = 0; cnt < 5; cnt++) { while (lock.test_and_set(std::memory_order_acquire)) ; // 自旋 std::cout << "Thread " << n << " count:" << cnt << std::endl; lock.clear(std::memory_order_release); // 释放锁 } } int main(int argc, char* argv[]) { std::vector<std::thread> v; for (int n = 0; n < 4; n++) { v.emplace_back(f, n); //使用参数进行初始化 } for (auto& t : v) { t.join(); //等待线程结束 } system("pause"); return 0; } 这个例子中,使用std::atomic_flag作为锁,通过test_and_set()和clear()函数来获得锁和释放锁。 总结来说,std::atomic_boolC++14中的原子布尔类型,可以用于多线程环境下的安全操作。在C语言中,可以使用自旋锁来实现多线程的同步。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值