21.y — 第 21 章项目
向读者 Avtem 致敬,感谢他构思并协作了此项目。项目时间:让我们实现经典的 15 拼图游戏!在 15 拼图中,你开始时会有一个随机的 4×4 瓷砖网格。其中 15 块瓷砖编号为 1 到 15。有一块瓷砖缺失。…
向读者 Avtem 致敬,感谢他构思并协作了此项目。项目时间:让我们实现经典的 15 拼图游戏!在 15 拼图中,你开始时会有一个随机的 4×4 瓷砖网格。其中 15 块瓷砖编号为 1 到 15。有一块瓷砖缺失。…
在课程中,我们介绍了表达式。默认情况下,表达式在运行时求值。在某些情况下,它们必须这样做:std::cin >> x; std::cout << 5 << ‘\n’; 由于输入和输出不能在编译时执行,因此上述表达式必须在运行时求值。在之前的课程中…
作者注:本课程是可选的。未来的课程会引用十六进制数,因此在继续之前,您应该至少对这个概念有所了解。在日常生活中,我们使用数字计数,其中每个数字可以是 0、1、2、3、4、5、6、7、8 或 9。十进制…
在之前的课程中,我们介绍了两种字符串类型:std::string () 和 std::string_view ()。由于 std::string_view 是我们第一次接触视图类型,我们将花一些额外的时间进一步讨论它。我们将重点介绍如何安全地使用 std::string_view,并提供一些示例来说明它如何…
类模板参数推导 (CTAD) C++17 从 C++17 开始,当从类模板实例化对象时,编译器可以从对象初始化器的类型推导出模板类型(这被称为或简称)。例如:#include <utility> // 用于 std::pair int main() { std::pair<int, int> p1{ …
在课程中,我们介绍了必须为每组不同的类型创建单独的(重载)函数的挑战:#include <iostream> // 用于计算两个 int 值中较大者的函数 int max(int x, int y) { return (x < y) ? y …
在之前的课程 () 中,我们指出函数定义的语法如下:returnType identifier() // identifier 替换为你的函数名 { // 你的代码在这里 } 尽管我们展示了返回类型为 void 的函数示例,但我们没有讨论这意味着什么 …
有些问题总是被一遍又一遍地问到。这个常见问题解答将尝试回答最常见的问题。问题 1:为什么我们不应该使用“using namespace std”?using namespace std; 语句是一个。using-directive 允许来自给定命名空间的所有标识符…
在课程中,我们介绍了 constexpr 关键字,它用于创建编译时(符号)常量。我们还介绍了常量表达式,它们是可以在编译时而不是运行时求值的表达式。常量表达式的一个挑战是,不允许在普通函数中调用函数…