Giter Site home page Giter Site logo

mq-b / loser-homework Goto Github PK

View Code? Open in Web Editor NEW
567.0 7.0 129.0 40.34 MB

卢瑟们的作业展示,答案讲解,以及一些C++知识

Home Page: https://mq-b.github.io/Loser-HomeWork/

License: Apache License 2.0

C++ 63.15% TeX 15.63% CMake 5.72% PowerShell 0.37% Shell 0.72% JavaScript 10.56% Python 1.10% HTML 2.75%
cpp cpp20 homework loser modern-cpp

loser-homework's Introduction

Modern C++ template

Anurag's GitHub stats

知乎 youtube

modern cpp

头像

Visitor Count

loser-homework's People

Contributors

11d-beyonder avatar azrbrk avatar baiyi-jiang avatar bluearc0 avatar corporal9736 avatar cra3z avatar cstgluigi avatar dynilath avatar frederick-vs-ja avatar gandyli avatar geihob avatar hatsushigure avatar heroboy avatar hustxiongkun avatar loser-linker avatar matrix-a avatar mifeng-super avatar mq-b avatar mq-loser avatar mrshinshi avatar ninter6 avatar nxcy avatar puji4810 avatar rsp4jack avatar social-mean avatar sugar0612 avatar suzukaze7 avatar test173209 avatar yuzhiy05 avatar zhaiqiming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

loser-homework's Issues

第3章-接口.md 中关于 MSVC 的问题已经在 VS 2022 17.10 Previews 1 中修复

参考

@Mq-b 我们应该考虑下这段如何重新组织:

事实上原书给的上面这段代码是有问题的,无法在 msvc 通过编译,这里使用的是 0 做初始值,有窄化转换,msvc 使用的是 {} 初始化。,检测到了,于是编译错误。(但是需要注意,不是简单的 {} 检测的问题,msvc 的实现和其他 stl 从根本上就不一样)
这里其实可以算作是 msvc 的 bug,这个场景需要良构 这里应该把 0 换成 Oull (基于当前 64 位环境),或者标准够高使用 0uz,再或者直接 std::size_t{0}

第六题标准答案的表述不准确

因为这个题就是语言律师题,所以更吹毛求疵一点。

std::atomic<int> n = 6;中,由于6std::atomic<int>不是同一类型,所以首先会调用用户定义的转换序列(说白了就是转换构造函数)。

  1. 用户定义转换序列不是函数,是至多三次转换构成的序列,"调用转换序列"含义不明。序列中的用户定义转换也不是函数,更非"说白了就是转换构造函数",而是由转换构造函数或非explicit转换函数所指定
  2. 除了 6std::atomic<int> 不是同一类型的准确说法是,目标类型是类类型(C++17后:且源类型的无 cv 限定版本并非目标类型或其派生类)。C++17 以前的表述因为语义上必然有构造函数的调用,转换的结果是作为构造函数的实参,所以它的 wording 没有要求源类型是否与目标类型一致,相应地此处的转换也可以是非用户定义转换。

即调用:

constexpr atomic( T desired ) noexcept;

构造出一个临时的atomic对象,即

std::atomic<int> n(std::atomic<int>(6))

这是正确的,但似乎点明此处为直接初始化比较好。而且后面提到 C++17 的变动没有重新阐述这一段,会造成歧义。

C++17之前的版本,理所应当应该查找检测复制/移动 构造函数,满足要求才可以通过编译。但是:

atomic( const atomic& ) = delete;

实际上atomic的复制构造被删除(同时移动构造也被抑制生成了)。所以自然而然的不允许。

C++17的改动是:引入了强制的复制消除
纯右值表达式作为构造对象的参数,不会再调用移动构造,也不会去检测,而是原位构造。

复制消除并非 C++17 引入,之前的版本就已有复制消除,如果表述成引入强制复制消除,应该是"移除非强制复制消除并引入其强制者",虽然仍然看起来很怪,不如"复制消除变为强制要求",但至少不是病句了。

事实上复制消除的表述在 C++17C++14 中并无太大变化,它是在语核中改变了纯右值的含义,如未指定出现临时量实质化,纯右值就不会初始化一个临时对象,这是实质导致复制消除变得强制的原因,两者含义接近但不等价。

顺带地现在回头看,C++17 前在复制消除时仍然要求复制/移动构造函数可用就并不那么"理所应当",所以现在的 cppreference 上要求构造函数可用的表述是后加的

关于 `C++CoreGuidelines` 对于 `detach` 的描述

https://github.com/Mq-b/Loser-HomeWork/blob/main/C++CoreGuidelines解析/第4章-函数.md#f53-在非局部使用包括要被返回存储在堆上或要传给其他线程的-lambda-表达式中避免通过引用来捕获

std::cout 的生存期与进程的生存期绑定。这意味着,在屏幕上打印出“C++11”之前,std::cout 对象可能已经消失了。

英文原书都一个意思

std::cout’s lifetime is bound to the lifetime of the process. This means that the thread thr may be gone before std::cout prints C++11 onscreen.

在新版的 C++CoreGuidelines F.53 中,倒是没有了这段描述。

我想讨论目前描述的合理性,用户使用 detach 应该必然要求且保证 detach 的线程在主线程、进程执行完毕之前,就会结束。如果没有,那也不单单是 std::cout 会出现问题了。

比如b乎聊过的。

集思广益一下第12题

可以是代码的,可以是选择题的,概念的还是先别了。
另外需私发标准答案给我进行参考。
尽量常见且有意义。

第九题发布了

写的最快最好的答案可作为标准答案
标注作者

check-in-msvc 编码问题

https://github.com/Mq-b/Loser-HomeWork/actions/runs/7733973298/job/21087097198

sluggish 的输入很显然有问题:

not valid target name: 涼風青葉, use: aep1-4ec-e-e-0

msbuild 的输出也很奇怪:

  Building Custom Rule D:/a/Loser-HomeWork/Loser-HomeWork/src/群友提交/CMakeLists.txt
  Seedking.cpp
  01_Seedking.vcxproj -> D:\a\Loser-HomeWork\Loser-HomeWork\build\src\群友提交\Debug\01_Seedking.exe

似乎并不好解决。尽量解决一下吧。

修整卢瑟作业 README.md

From #205

感觉现在的内容有点杂了,作业和解析感觉可以单独搞一个文件,找个有审美的卢瑟重新制作一下。

第十题更新了

对措辞有疑问有想修改的迅速bb。

想写标准答案和解析的速度。

取消关于“英文和中文汉字进行空格”的 CI 检查

#210 (comment)_ 中提到过“现代C++”作为专有名词不需要空格检查的问题。

目前的 CI 检查无法判定专有名词,而对其进行判定几乎不可能。例如“mq败” “现代C++”,专有名词中不应当添加空格。

所以提议取消关于“英文和中文汉字进行空格”的 CI 检查,而是由 reviewer 检查。

改进 CI/Build System

Part of #227

目前的打算是集成 build system,然后 CI 运行 build system 公开的 target。

  1. Build system: CMake
  2. Features:
    • Build C++
    • Build Docs
    • Build Homework
    • Front Matter

(WIP)

C++ Core Guidelines Explained 原书关于 `noexcept` 非常值得商榷的观点

  • 即使你的函数可以抛出异常,noexcept 往往也合理。
    noexcept 在这种情况下意味着:
  • 我不在乎异常。其原因可能是,你无法对异常做出反应。
    这种情况下,系统处理异常的唯一办法是调用 std::terminate()

原文:

Even if your function can throw, noexcept often makes much sense. noexcept means in this case: I don’t care. The reason may be that you have no way to react to an exception. Therefore, the only way to deal with exceptions is to invoke std::terminate().

该观点的合理性非常可疑: noexcept 在此的作用其实是“不允许任何人处理异常”。我不关心异常或没有办法当下处理,不代表更外层的调用方不能关心或不能处理。

C++ 核心指导方针原文)本身没有这一稍显怪异的观点。

PrintCSS rocks!

采用 PrintCSS 技术,不再采用 LaTeX 生成 PDF,而是用 HTML 和 CSS 生成 PDF。

第十题标准答案不符合题意

题目中说

要求是支持聚合体拥有 0 到 4 个数据成员的遍历。

但是嵌套的聚合体用这种方法会导致数据成员个数判断错误。

struct Z { int a{1}, b{2}, c[2]{3, 4}; } z;
std::cout << size<Z>() << '\n';

本来应该得到3,却输出了4,从而在后面结构化绑定的时候会因为名字个数错误而编译失败。
https://godbolt.org/z/K7KEPfMP9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.