mq-b / loser-homework Goto Github PK
View Code? Open in Web Editor NEW卢瑟们的作业展示,答案讲解,以及一些C++知识
Home Page: https://mq-b.github.io/Loser-HomeWork/
License: Apache License 2.0
卢瑟们的作业展示,答案讲解,以及一些C++知识
Home Page: https://mq-b.github.io/Loser-HomeWork/
License: Apache License 2.0
参考
@Mq-b 我们应该考虑下这段如何重新组织:
事实上原书给的上面这段代码是有问题的,无法在
msvc
通过编译,这里使用的是0
做初始值,有窄化转换,msvc 使用的是{}
初始化。,检测到了,于是编译错误。(但是需要注意,不是简单的{}
检测的问题,msvc 的实现和其他 stl 从根本上就不一样)
这里其实可以算作是 msvc 的 bug,这个场景需要良构 这里应该把 0 换成Oull
(基于当前 64 位环境),或者标准够高使用0uz
,再或者直接std::size_t{0}
。
因为这个题就是语言律师题,所以更吹毛求疵一点。
std::atomic<int> n = 6;
中,由于6
和std::atomic<int>
不是同一类型,所以首先会调用用户定义的转换序列(说白了就是转换构造函数)。
explicit
转换函数所指定。6
跟 std::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++17
跟 C++14
中并无太大变化,它是在语核中改变了纯右值的含义,如未指定出现临时量实质化,纯右值就不会初始化一个临时对象,这是实质导致复制消除变得强制的原因,两者含义接近但不等价。
顺带地现在回头看,C++17
前在复制消除时仍然要求复制/移动构造函数可用就并不那么"理所应当",所以现在的 cppreference
上要求构造函数可用的表述是后加的。
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乎聊过的。
可以是代码的,可以是选择题的,概念的还是先别了。
另外需私发标准答案给我进行参考。
尽量常见且有意义。
写的最快最好的答案可作为标准答案。
并标注作者。
https://zhuanlan.zhihu.com/p/256202496
事实上,”但当使用基类指针或引用来调用虚函数时,它都不能是内联函数,因为调用发生在运行时,是动态绑定的。“
并不可信
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
似乎并不好解决。尽量解决一下吧。
From #205
感觉现在的内容有点杂了,作业和解析感觉可以单独搞一个文件,找个有审美的卢瑟重新制作一下。
对措辞有疑问有想修改的迅速bb。
想写标准答案和解析的速度。
在 #210 (comment)_ 中提到过“现代C++”作为专有名词不需要空格检查的问题。
目前的 CI 检查无法判定专有名词,而对其进行判定几乎不可能。例如“mq败” “现代C++”,专有名词中不应当添加空格。
所以提议取消关于“英文和中文汉字进行空格”的 CI 检查,而是由 reviewer 检查。
Part of #227
目前的打算是集成 build system,然后 CI 运行 build system 公开的 target。
(WIP)
关于 loser homework 的第十五题表达式模板。卢瑟看不懂,望大佬更新一下题目解析(已经五十天没更新了 QAQ)。 @Matrix-A
- 即使你的函数可以抛出异常,
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 invokestd::terminate()
.
该观点的合理性非常可疑: noexcept
在此的作用其实是“不允许任何人处理异常”。我不关心异常或没有办法当下处理,不代表更外层的调用方不能关心或不能处理。
C++ 核心指导方针(原文)本身没有这一稍显怪异的观点。
https://mq-bai.gitbook.io/modern-cpp-concurrent-programming
这是 https://github.com/Mq-b/ModernCpp-ConcurrentProgramming-Tutorial 的效果。
只需要写好 SUMMARY.md
文件,问题就不大。
后面可以考虑整一下,整理一下,主要就是写好这个目录配置文件就行。
采用 PrintCSS 技术,不再采用 LaTeX 生成 PDF,而是用 HTML 和 CSS 生成 PDF。
#101
这个问题的答案是什么?
信我
非标准,需要修改。
class ComponentBase{ protected: static inline size_t component_type_count = 0; };
题目中说
要求是支持聚合体拥有 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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.