至于为什么 initializer_list 和 数组冲突, 因为数组Vector 他本质是间接 initializer_list, 并且当一个对象有 initializer_list 构造函数时 优先匹配 initializer_list
具体可以参考mcpp-stand的在线电子书的initializer_list章节: https://sunrisepeak.github.io/mcpp-standard/cpp11/09-list-initialization.html
至于为什么 initializer_list 和 数组冲突, 因为数组Vector 他本质是间接 initializer_list, 并且当一个对象有 initializer_list 构造函数时 优先匹配 initializer_list
具体可以参考mcpp-stand的在线电子书的initializer_list章节: https://sunrisepeak.github.io/mcpp-standard/cpp11/09-list-initialization.html
@dustchens 可以尝试从最简单的方式先满足Json风格初始化, 然后再这个基础看看怎么调整比较适合解析。 可能是一些思路
#include <iostream>
#include <initializer_list>
struct Json {
Json() = default;
Json(std::initializer_list<Json> init) { std::cout << "initializer_list of Json with size: " << init.size() << std::endl; }
Json(double value) { std::cout << "double: " << value << std::endl; }
Json(int value) { std::cout << "int: " << value << std::endl; }
Json(bool value) { std::cout << "bool: " << std::boolalpha << value << std::endl; }
Json(std::nullptr_t value) { std::cout << "null" << std::endl; }
Json(const char* value) { std::cout << "const char*: " << value << std::endl; }
Json(std::string value) { std::cout << "string: " << value << std::endl; }
};
int main() {
Json json_1 { 3.141, 2, 17 };
std::cout << "----" << std::endl;
Json json_2 {
{"pi", 3.141},
{"happy", true},
{"name", "Niels"},
{"nothing", nullptr},
{
"answer", {
{"everything", 42}
}
},
{"list", {1, 0, 2}}
};
return 0;
}
测试了一下正常安装过程, 应该是没有问题的, 是不是之前安装过程存在中断或错误呢。 可以尝试卸载然后重新安装试一试
xlings self clean
xlings remove code@1.100.1
xlings install code@1.100.1
code --version
具体示例
可以手动查看一下SPath这个路径下有没有code.cmd这个文件。
(补充信息: 电脑有额外的D盘吗)
@sky-littlestar 我说的意思就是把你上面的代码 整理一下 用项目(Demo)的方式 放到github, 不是说其他什么写法
感觉是不是可以拆分一下, 把游戏主体 和 链表实现 分开 用比较项目的目录树风格, 然后放到github上 变成一个Demo项目
@xyc 尝试按这个贴种的步骤 设置以下电脑的编码为 utf-8 然后再重新安装试一试 http://forum.d2learn.org/post/418
备注一下使数学公式的使用语法
单行公式语法 - $ 你的公式 $
$ log_2^n $
$ log_2^n $
多行公式语法 - $$ 你的公式 $$
$$
log_2^n =>
log_2^9 = 3 , n = 9
$$
$$
log_2^n =>
log_2^9 = 3, n = 9
$$
算法复杂度直观通俗理解: 每次比较完成, 被选中的基准值会被放到最终他所在的位置, 所以比较N遍即可完成排序, 而每次比较完后会分裂成2个数组, 总的数组就 $log_2^N$级别
所以算法复杂度就是 比较的遍数 x 要比较的数组的数量, 即:
$$
O(nlog_2^n)
$$
注: 文章写完后, 也可以分享到社区群里
前段时间社区中xlings项目上有人提了一个关于centos7上 安装gcc15的但是不能使用的问题, 我一看原来是由于glibc的版本太老了导致的 (制作gcc15包的时候我也没考虑太多glibc版本依赖问题)
于是我就折腾了几天给xlings工具增加了一个从源码构建gcc工具链的helper工具 musl-cross-make, 同时也提供了一个预构建的gcc15包, 让我们在centos7上可以用下面简单的方法就能安装gcc15或自己从源码构建gcc15. 最终效果如下:
xlings install gcc@15
xlings install musl-cross-make #安装构建helper工具
# 命令格式: musl-cross-make version [--output yourOutputDir] [--target yourTargetArch]
musl-cross-make 15 --output mygcc-15
下面是具体的问题解决过程, 以及 centos上 一键创建支持cpp23的cmake模板工程项目的使用示例&演示...
root/.xlings_software_install/xlings-main/bin/xmake: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /root/.xlings_software_install/xlings-main/bin/xmake)
/root/.xlings_software_install/xlings-main/bin/xmake: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /root/.xlings_software_install/xlings-main/bin/xmake)
/root/.xlings_software_install/xlings-main/bin/xmake: /lib64/libc.so.6: version `GLIBC_2.29' not found (required by /root/.xlings_software_install/xlings-main/bin/xmake)
tools/install.unix.sh:行65: xlings: 未找到命令
xlings install gcc@15.1.0
安装后工具链的使用问题xlings install gcc@15
xlings install fromesource:musl-gcc@version
xlings install musl-cross-make
musl-cross-make version --output yourInstallDir
, musl-cross-make 9.4 --output mygcc-9
构建后会安装到当前目录的mygcc-9下原来的gcc
安装gcc15
会自动安装依赖(gcc15 / cmake4 ...) , 并配置好环境
@tenp00 可能是临时的网络波动影响的下载安装包失败, 可以重新运行试一试. 如果还报这个问题, 可以按下面方法分两步安装试一试: https://xlings.d2learn.org/documents/qa.html
这里往stream里写数据的时候没有加filled的偏移, 导致重复把数据写到了buff的开头部分
@hammerers 是只要speed不是1就会报错 小于1和大于1有区别吗, crash的时候调用栈有吗
补充仓库地址: https://github.com/hammerers/sonic_ffmpeg_sdl_audio_player
可以提供一个最小可复现示例项目的zip或git仓库链接, 以及崩溃时的调用栈...
(大面积代码更建议用文本, 截图不方便)
关闭/每天/一周/两周
mian分支 + feature分支
刚刚更新优化了一下工具在macos平台上的控制台刷新机制
如果macos上遇到控制台的输出不刷新或重复输出问题, 可以运行下面命令进行更新一下工具(默认只会覆盖xlings的核心代码, 不用但心之前的安装或配置的环境和数据缓存
curl -fsSL https://d2learn.org/xlings-install.sh | bash
@yiten94 在 hello-mcpp中编译报错'auto' not allowed in function return type 中说:
error: 'auto' not allowed in function
该问题已经修复
在教程项目根目录运行代码命令即可更新到最新代码(或手动用git进行同步
d2x update
@yiten94 可以提供一下系统版本和具体的报错信息(报错时的控制台的输出, 包含练习名), 然后我分析一下原因
用 std::array的initializer_list + 一键计算字节的模板来演示用于模板参数的可能
#include <iostream>
#include <array>
template <typename T, int SZ>
struct Byte {
static constexpr int size = sizeof(T) * SZ;
};
int main() {
constexpr std::array<int, 4> arr {1, 2, 3, 4};
std::cout << Byte<int, arr.size()>::size << std::endl;
return 0;
}
想法来自该视频评论区的讨论: https://www.bilibili.com/video/BV1vKuQzkEo2