跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++算法

C++ 中的逻辑运算符替代标记:and、or、not 详解

综述由AI生成C++ 标准提供了 and、or、not 作为逻辑运算符的替代标记,分别等价于 &&、|| 和 !。它们的主要价值在于提升复杂条件判断的可读性,尤其在嵌套逻辑较多时。详细解析了这三个关键字的功能特性、短路求值行为及兼容性注意事项,并通过一个完整的用户权限校验示例,展示了在实际开发中如何结合结构体与逻辑表达式进行规范化的代码编写。相比传统符号,使用单词形式能让代码意图更直观,但需注意团队编码规范的统一。

FrontendX发布于 2026/3/16更新于 2026/4/293 浏览
C++ 中的逻辑运算符替代标记:and、or、not 详解

C++ 中的逻辑运算符替代标记:and、or、not 详解

在 C++ 中,and、or 和 not 是作为 替代标记 引入的。它们分别等价于传统的逻辑运算符 &&(逻辑与)、||(逻辑或)和 !(逻辑非)。这些关键字的存在主要是为了提高代码的可读性,尤其是在涉及多个逻辑运算时。

1. and 关键字(逻辑与)

  • 功能: 执行逻辑与操作。当且仅当两个操作数都为真时,结果才为真。
  • 等价运算符: &&
  • 短路求值: 与 && 一样,and 也使用短路求值。如果第一个操作数为假,则不会计算第二个操作数。

示例代码:

bool isSunny = true;
bool isWarm = true;
if (isSunny and isWarm) {
    // 等价于 if (isSunny && isWarm)
    cout << "Perfect weather for a picnic!" << endl;
}

真值表:

操作数 A操作数 BA and B
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

2. or 关键字(逻辑或)

  • 功能: 执行逻辑或操作。当至少一个操作数为真时,结果就为真。
  • 等价运算符: ||
  • 短路求值: 与 || 一样,or 也使用短路求值。如果第一个操作数为真,则不会计算第二个操作数。

示例代码:

bool hasCoffee = false;
bool hasTea = ;
 (hasCoffee  hasTea) {
    
    cout <<  << endl;
}
true
if
or
// 等价于 if (hasCoffee || hasTea)
"You have a hot beverage."

真值表:

操作数 A操作数 BA or B
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

3. not 关键字(逻辑非)

  • 功能: 执行逻辑非操作。对操作数进行取反。
  • 等价运算符: !

示例代码:

bool doorLocked = true;
if (not doorLocked) {
    // 等价于 if (!doorLocked)
    cout << "Warning: Door is unlocked!" << endl;
}

真值表:

操作数 Anot A
truefalse
falsetrue

4. 总结与注意事项

  1. 等价性: and、or、not 在功能上与 &&、||、! 完全相同,可以互换使用。
  2. 可读性: 它们的主要优势在于提高代码的可读性,尤其是在复杂的逻辑表达式中。例如 (a > b) and (c < d) or not e 可能比 (a > b) && (c < d) || !e 更容易阅读。
  3. 兼容性: 这些替代标记是 C++ 标准的一部分。它们 不是 C 语言的关键字。因此,在纯 C 代码中使用它们会导致编译错误。在 C++ 中,它们被广泛支持。
  4. 头文件: 在早期版本的 C++ 中,可能需要包含 <ciso646> 头文件来使用这些替代标记。但在现代 C++ 标准(如 C++11 及以后)中,这些关键字是核心语言的一部分,通常不需要显式包含该头文件。
  5. 使用建议: 选择使用 and/or/not 还是 &&/||/! 主要取决于个人或团队的编码风格约定。重要的是在项目中保持一致性。

实战示例

下面是一个完整的用户权限校验场景,展示了如何在实际业务逻辑中运用这些替代符。

#include <iostream>
#include <string>
using namespace std;

// 定义一个用户结构体
struct User {
    int age;
    bool isAdmin;
    bool hasSubscription;
    bool isBanned;
};

// 函数:检查用户是否有访问权限
bool hasAccess(const User& user) {
    // 年龄必须在 18 到 65 岁之间
    bool ageValid = (user.age >= 18) and (user.age <= 65);
    
    // 用户是管理员或有订阅,且未被封禁
    bool statusValid = (user.isAdmin or user.hasSubscription) and not user.isBanned;
    
    // 特殊规则:如果年龄是 21 岁,需要额外检查(非管理员需有订阅)
    bool specialCheck = not(user.age == 21 and not user.isAdmin and not user.hasSubscription);
    
    // 最终权限:年龄有效、状态有效,且满足特殊规则
    return ageValid and statusValid and specialCheck;
}

int main() {
    // 创建测试用户
    User user1 = {25, true, false, false};   // 管理员,未封禁
    User user2 = {20, false, true, false};   // 有订阅,年龄有效
    User user3 = {21, false, false, false};  // 年龄 21,但无订阅

    // 测试权限
    cout << "User1 Access: " << hasAccess(user1) << endl; // 输出 1 (true)
    cout << "User2 Access: " << hasAccess(user2) << endl; // 输出 1 (true)
    cout << "User3 Access: " << hasAccess(user3) << endl; // 输出 0 (false)

    return 0;
}

运行结果:

User1 Access: 1
User2 Access: 1
User3 Access: 0

逻辑运算真值表示意图

代码解析:

  1. 结构体和条件定义:我们定义了一个 User 结构体,包含年龄、管理员状态、订阅状态和封禁状态。在 hasAccess 函数中,使用 and、or 和 not 构建多个逻辑条件:
    • ageValid:检查年龄是否在 18 ≤ age ≤ 65 范围内。
    • statusValid:用户是管理员或拥有订阅,且未被封禁(not user.isBanned)。
    • specialCheck:特殊规则,如果年龄是 21 岁,则必须不是非管理员且无订阅的情况(避免漏洞)。
  2. 逻辑组合:最终权限返回 ageValid and statusValid and specialCheck,确保所有条件同时满足。在 main 函数中,测试不同用户案例:
    • user1:年龄 25,是管理员,满足所有条件(输出 true)。
    • user2:年龄 20,有订阅,满足条件(输出 true)。
    • user3:年龄 21,无订阅且非管理员,触发特殊规则失败(输出 false)。

权限校验流程图

目录

  1. C++ 中的逻辑运算符替代标记:and、or、not 详解
  2. 1. and 关键字(逻辑与)
  3. 2. or 关键字(逻辑或)
  4. 3. not 关键字(逻辑非)
  5. 4. 总结与注意事项
  6. 实战示例
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 前端实战:实现浏览器通知功能
  • 2026 年 3 月大模型全景解析:国产登顶、百万上下文与 Agent 工业化
  • Visual C++ 运行库修复指南:解决 Windows 程序兼容问题
  • 使用 Copilot 制定 60 天 AI 学习计划并同步至 Outlook 日程
  • 第十三届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组题解
  • 前端 CI/CD 流程与自动化部署实践
  • HDFS 常用命令与 Java API 编程实践
  • Stable Diffusion 结合 AI 监控:智能安防原型搭建实战
  • JavaScript 二维码跨平台处理实战技巧与优化
  • MVEL 表达式编译与执行测试
  • OpenClaw 本地部署与 Ollama 集成配置指南
  • nanobot 轻量级 AI Agent 框架实战:搭建 QQ 机器人与搜索扩展
  • ToDesk 内置 ToClaw AI:科技新闻日报自动化实战
  • Telegram 搜索机器人推荐:高效查找频道与文件资源
  • AI Agent 技能(Skills)设计与编写实战指南
  • Mac mini M4 本地部署 OpenClaw + Ollama 接入飞书机器人实战
  • Java 运算符基础与使用指南
  • Java 初识面向对象:类、对象与封装核心详解
  • Spring 整合 Shiro 使用 Redis 缓存会话时报错排查与解决
  • LeetCode Hot 100 精选:C 语言实现与思路解析(1-21)

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online