encounter2017

encounter2017

V2EX 第 409290 号会员,加入于 2019-05-06 11:39:40 +08:00
今日活跃度排名 9531
encounter2017 最近回复了
@cnbatch 你说的这两个问题我用 gpt 4o 版本验证了下都答对了:
Q: std::move_only_function 是哪个 C++标准的?

A: std::move_only_function 是 C++23 标准新增的功能。

它是 std::function 的一种变体,专门用于只允许移动而不允许复制的可调用对象。std::move_only_function 提供了更高效的语义,特别适合需要独占所有权的场景(例如异步任务调度、回调管理等)。

这个类型定义在头文件 <functional> 中。


Q: var theName = "hello"u8; 这段 C# 代码的 u8 是什么意思?在哪个 C# 版本可以用?

A:
在 C# 中,u8 是 UTF-8 字符串文字后缀,用于表示一个字符串文字是 UTF-8 格式的字节数组。这一特性是在 C# 11 中引入的。

特性解释
csharp
复制代码
var theName = "hello"u8;
"hello"u8:

表示将字符串 "hello" 编码为 UTF-8 字节数组。
结果类型为 ReadOnlySpan<byte>,它是一个不可修改的字节序列。
行为:

这段代码的作用是将字符串 "hello" 转换为 UTF-8 编码格式的字节序列。
例如,"hello"u8 会被编译为字节数组 { 0x68, 0x65, 0x6C, 0x6C, 0x6F }。
C# 版本
u8 后缀是在 C# 11 中引入的,因此你需要确保以下环境支持:

语言版本:C# 11 或更高。
.NET SDK:需要 .NET 7 或更高版本支持。
应用示例
csharp
复制代码
using System;

class Program
{
static void Main()
{
var theName = "hello"u8;

Console.WriteLine($"Type: {theName.GetType()}");
Console.WriteLine($"Bytes: {string.Join(", ", theName.ToArray())}");
}
}
输出:

vbnet
复制代码
Type: System.ReadOnlySpan`1[System.Byte]
Bytes: 104, 101, 108, 108, 111
适用场景
高效处理 UTF-8 数据:
避免字符串在内存中多次编码转换。
与低级字节处理结合:
更容易与 Span<byte> 或 Memory<byte> 结合使用。
序列化和网络通信:
适合在序列化或处理网络协议时直接操作字节。
注意事项
只读:

u8 后缀生成的是 ReadOnlySpan<byte>,不能直接修改。
如果需要可修改的字节数组,可以使用 .ToArray() 方法转换为 byte[]。
C# 版本要求:

如果代码未在支持 C# 11 的环境中运行,会导致编译错误。确保项目文件启用了 C# 11:
xml
复制代码
<LangVersion>11</LangVersion>
通过 u8 后缀,可以简化对 UTF-8 编码数据的处理,同时利用 ReadOnlySpan<byte> 的性能优势。
48 天前
回复了 jeckyhuang 创建的主题 程序员 AI 真的能代替程序猿吗?
@dfkjgklfdjg 还真能写,就是不知道实现起来有没有可能
https://chatgpt.com/share/67346f71-26d4-8003-8486-87d3813b0cf1
99 天前
回复了 wuhao1 创建的主题 MySQL 老生常谈 关于 子查询的应用
我觉得还是看业务场景,比如说我这里有一个业务场景就是需要查询树状结点下面的所有子节点信息,这种情况下用 recursive cte 查询就很方便,一次就能查完,IO 都在数据库做了,不然的话还得多次查询数据库.

一个简单的示例
```
CREATE TABLE binary_tree (
id INT PRIMARY KEY,
value VARCHAR(255),
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES binary_tree(id)
);

INSERT INTO binary_tree (id, value, parent_id) VALUES
(1, 'Root', NULL),
(2, 'Left Child', 1),
(3, 'Right Child', 1),
(4, 'Left Grandchild', 2),
(5, 'Right Grandchild', 2),
(6, 'Another Left Grandchild', 3),
(7, 'Another Right Grandchild', 3);

WITH RECURSIVE tree_cte AS (
-- Base case: select the root node
SELECT id, value, parent_id, 0 AS level, CAST(id AS text) AS path
FROM binary_tree
WHERE parent_id IS NULL

UNION ALL

-- Recursive case: select child nodes
SELECT c.id, c.value, c.parent_id, p.level + 1, CONCAT(p.path, ',', CAST(c.id AS text))
FROM binary_tree c
JOIN tree_cte p ON c.parent_id = p.id
)
SELECT id, value, parent_id, level, path
FROM tree_cte
ORDER BY path;

1,Root,,0,1
2,Left Child,1,1,"1,2"
4,Left Grandchild,2,2,"1,2,4"
5,Right Grandchild,2,2,"1,2,5"
3,Right Child,1,1,"1,3"
6,Another Left Grandchild,3,2,"1,3,6"
7,Another Right Grandchild,3,2,"1,3,7"

```
2022-12-08 11:01:07 +08:00
回复了 xikazi 创建的主题 问与答 [求助] : FFmpeg 怎么读。
/ˈef.fem.dʒiː/
2022-08-25 10:26:09 +08:00
回复了 samin 创建的主题 程序员 记一次 PostgreSQL 事故处理
用 timestamp with time zone 是不是就没这么多事情了
2022-07-28 16:27:47 +08:00
回复了 KIRAYOMATO 创建的主题 问与答 非科班转码需要学哪些计算机专业的课程?
@rekulas 没放反。因为老老实实写问题描述记录日志,大多数人都不会认真看。挑起争议话题立刻就有人来给你纠正标准做法了
错误的提问方式❌:我想要实现一个这样的场景,这是我的报错日志,我做了如下尝试,有什么办法可以解决这个问题?

正确的提问方式✅: A 就是个垃圾,你看我用 B 也能做到一样好(附上错误的实践方式)
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 22:49 · PVG 06:49 · LAX 14:49 · JFK 17:49
Developed with CodeLauncher
♥ Do have faith in what you're doing.