日志打印

news/2024/11/19 0:47:53/文章来源:https://www.cnblogs.com/aclq/p/18554043

日志打印

OffsetT

OffsetT<float> dragOffset = OffsetT<float>(offsetX, offsetY);
LOGE("aclq dragOffset: %{public}f, %{public}f", dragOffset.GetX(), dragOffset.GetY());

Dimension ==> ConvertToPx() 转成 double ==> 强转成 float

float minHeight = static_cast<float>(SINGLE_LINE_TITLEBAR_HEIGHT.ConvertToPx());double ConvertToPx() const;

WeakPtr 升级为 RefPtr

RefPtr<T> Upgrade() const

std::optional 用法

std::optional 是 C++17 中引入的一个模板类,表示一个可能存在也可能不存在的值。它封装了一个值,并提供了简单的接口来判断该值是否存在。它特别适用于表示函数可能返回有效值或没有值的情况,避免了使用指针和空值的复杂性。

基本语法

#include <iostream>
#include <optional>std::optional<int> get_positive_value(bool condition) {if (condition) {return 42;  // 返回有效的值} else {return std::nullopt;  // 表示没有值}
}int main() {std::optional<int> value = get_positive_value(true);if (value) {  // 检查是否有值std::cout << "Value: " << value.value() << std::endl;} else {std::cout << "No value" << std::endl;}return 0;
}

主要功能

1. 构造

  • std::optional obj;:没有值,默认初始化为 std::nullopt。
  • std::optional obj(value);:初始化并包含 value。
  • std::optional obj = std::nullopt;:显式初始化为空。

2. 判断是否有值

  • obj.has_value():返回 true 如果包含有效的值,返回 false 否则
  • obj 本身可以当作布尔值来判断是否有值

3. 访问值

  • obj.value():返回存储的值。如果没有值,抛出 std::bad_optional_access 异常
  • obj.value_or(default_value):如果有值,返回该值,否则返回 default_value。

4. 修改值

  • obj = value:修改值
  • obj.reset():清空值,变为无值

5 Demo

# 基本使用
#include <iostream>
#include <optional>int main() {std::optional<int> maybeInt;  // 默认是无值状态if (!maybeInt) {std::cout << "No value\n";}maybeInt = 10;  // 给它赋一个值if (maybeInt) {std::cout << "Value: " << *maybeInt << std::endl;  // 使用解引用操作符来访问值}return 0;
}
//  使用 value_or 提供一个默认值
#include <iostream>
#include <optional>int main() {std::optional<int> maybeInt;// 使用 value_or() 提供一个默认值int value = maybeInt.value_or(42);std::cout << "Value: " << value << std::endl;  // 输出:Value: 42maybeInt = 10;value = maybeInt.value_or(42);std::cout << "Value: " << value << std::endl;  // 输出:Value: 10return 0;
}
//  通过函数返回 optional
#include <iostream>
#include <optional>std::optional<int> divide(int numerator, int denominator) {if (denominator == 0) {return std::nullopt;  // 返回没有值,表示失败}return numerator / denominator;  // 返回结果
}int main() {std::optional<int> result = divide(10, 2);if (result) {std::cout << "Result: " << *result << std::endl;} else {std::cout << "Division by zero error\n";}return 0;
}
//  使用 reset() 清空 optional
#include <iostream>
#include <optional>int main() {std::optional<int> maybeInt = 10;std::cout << "Before reset: " << *maybeInt << std::endl;maybeInt.reset();  // 清空值if (!maybeInt) {std::cout << "After reset: No value\n";}return 0;
}

优势

  1. 避免空指针:不需要使用裸指针(nullptr)来表示缺失的值,避免空指针引发的问题。
  2. 类型安全:在没有值的情况下,optional 允许你显式地检查是否有值。
  3. 更简洁的 API:使用 value_or 和 has_value 等接口简化了代码逻辑。
    注意事项
  • std::optional 并不适用于所有场景,只有在某个值可能缺失时,它才是一个好选择。对于一些简单的情况,比如 nullptr 和 -1 用来表示无效值,std::optional 可能会显得过于复杂。
  • 使用 value() 获取值时,必须确保 optional 确实有值,否则会抛出异常 std::bad_optional_access。如果不确定是否有值,可以使用 value_or() 提供默认值来避免异常。
    std::optional 提供了一种优雅且类型安全的方式来处理可选值,在现代 C++ 编程中具有广泛的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836466.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

福气满满-冲刺日志(第四天)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 福气满满团队成员学号-名字 052203132童潇剑,102201226陈潇健,102201235曾炜坤,102201234洪庆杨,102201224 陈博涵,18220031…

小Pwn手杂谈(1.0.0)之不同输入函数之间的区别

前言 本文涉及 read函数 fgets函数 scanf函数 以及 gets函数 获取字符串后内存的区别,以及在pwntools中使用 sendline 和 send 的区别。实验过程有些冗长,嫌麻烦的师傅可以直接查看下面的总结 实验目标read fgets scanf 这种可以限定大小的输入,如果输入量小于/等于/大于它们…

福气满满-冲刺日志(第三天)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 福气满满团队成员学号-名字 052203132童潇剑,102201226陈潇健,102201235曾炜坤,102201234洪庆杨,102201224 陈博涵,18220031…

开发一个移动App总共需要四步

🎯开发一个移动App总共需要四步🤣 1️⃣注册账号:在平台注册开发者账号。 2️⃣开发应用:使用专业工具开发应用。 3️⃣测试与优化:进行多轮测试和优化。 4️⃣准备发布:整理发布材料,设置发布日期。

单变量微积分学习笔记:函数的导数(3)

单变量微积分学习笔记:函数的导数(3) 前置 导数的定义 \[f(x) = \lim_{\Delta x \to 0} \frac{f(x+\Delta x) - f(x)}{\Delta x} \\ f(x) = \lim_{x \to x_0} \frac{f(x) - f(x_0)}{x - x_0} \] 割线(Secant line):经过函数图像任意两个不重复的点的直线 切线(Tangent l…

福气满满-冲刺日志(第二天)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 福气满满团队成员学号-名字 052203132童潇剑,102201226陈潇健,102201235曾炜坤,102201234洪庆杨,102201224 陈博涵,18220031…

DQL

1.使用select进行单表的查询 select*from 表名 会查询所有元素 select 列名,列名 from 表名 会查询所在列的元素select distinct 列名 from 表名; 会去除重复元素添加where字句来限定查询目标select*from student where name not in(‘元素’,元素); where 列名 not in(‘…

《Django 5 By Example》阅读笔记:p645-p650

《Django 5 By Example》学习第8天,p645-p650总结,总计6页。 一、技术总结 1.django-rest-framework (1)serializer p648, Serializer: Provides serialization for normal Python class instances。Serializer又细分为Serializer, ModelSerializer, HyperlinkedModelSeriali…

P1314 [NOIP2011 提高组] 聪明的质监员

题目 [NOIP2011 提高组] 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有 n 个矿石,从 1 到 n 逐一编号,每个矿石都有自己的重量 wi 以及价值 vi 。检验矿产的流程是:给定m 个区间 [li,ri]; 选出一个参数 W; 对于一个区间 [li,ri]…

开源 - Ideal库 - 枚举扩展设计思路及实现难点(三)

分享枚举扩展设计思路,包括枚举值、名、描述、项、类型转换。实现难点包括枚举名称、描述转枚举处理,枚举值类型支持,高效返回键值对,识别有效位标志组合等。今天想和大家分享关于枚举扩展设计思路和在实现过程中遇到的难点。01、设计思路 设计思路说起来其实也很简单,就是…

安装新版pycharm 专业版 百分百成功

安装新版pycharm 专业版 百分百成功 创建时间:20241103 1. 下载插件 1.1 打开下面的网站 https://3.jetbra.in/1.2 选择能进去的网站 没使用鸡哥上网使用鸡哥上网1.3 进入的界面1.4 下载插件 查看这里支持的版本号2. 在官网下载对应的版本 2.1 官网的历史版本位置 我这里使用…

vercel无法导入github项目

背景 点击import后,浏览器打开了github的项目链接,而不是有关于项目部署的设置。根据网络上的说法,import后就会出现相关的配置页面,然而没有出现下面是预想的页面然而并没有出现。 解决 使用cli工具。 npm install -g vercel# 登录 vercel login # 部署 vercel回到官网,发…