layout | title |
---|---|
post |
第57期 |
从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
最近非常忙,更新也有拖延,见谅。解不出bug我都想跳楼了
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 第144期
- Chromium "Type confusion" 的bug影响QtWebEngine,请升级到Qt 5.15.9, Qt 6.2.5 or Qt 6.3.0.
- zlib1.2.11 安全问题 CVE-2018-25032 which allows memory corruption when deflating (i.e., when compressing) if the input has many distant matches. 请使用到的尽快升级版本,qt的qCompress也受影响,如果使用,务必升级
int main() {
assert(std::ranges::all_of (std::array{1, 1, 1}, [](const auto& value) { return value == 1; }));
assert(std::ranges::any_of (std::array{1, 2, 3}, [](const auto& value) { return value == 2; }));
assert(std::ranges::none_of(std::array{1, 2, 3}, [](const auto& value) { return value == 4; }));
}
没啥说的,algorithm算法的range版本
作者写了个库,很有意思
查bug要先看issue和release信息。不过tcmalloc有很多都替换成mimalloc和jemalloc了。
xmake真的挺好用的。自己构建小东西,推荐使用
赵工的这个整理挺不错的。会介绍一些系统知识
老生常谈了,bool语义不清晰,要是多个参数都是bool那可要了老命了,最好不要用 几种解决办法,用enum不同类型区分,或者写注释,多写注释
主要是使用zeal的cli工具嵌入,最近才知道zeal支持linux了。可以下载cpp的文档然后用zeal-cli来搜索,省一个搜索的功夫
介绍工厂模式怎么组织代码的。这里不展开了。
struct S
{
std::function<void()> do_something;
int v;
};
S s;
s.do_something = []() { std::cout << "hello"; };
// does not print anything
std::invoke(&S::do_something, s);
为什么不打印???我明明调用了invoke
事实上得这么用
std::invoke(&S::do_something, s)();
一旦理解了这种用法,代码就有了新的写法,面向invoke编程
// Old and busted
this->dict.find(3)->second = "meow";
// New hotness
std::invoke(
static_cast<std::map<int, std::string>::iterator
(std::map<int, std::string>::*)(int const&)>(
&std::map<int, std::string>::find),
std::invoke(&MyClass::dict, this), 3)->second = "meow";
// Beyond hot
std::invoke(
static_cast<std::string& (std::string::*)(char const*)>
(&std::string::operator=),
std::invoke(&std::pair<int const, std::string>::second,
std::invoke(
static_cast<std::pair<int const, std::string>& (
std::map<int, std::string>::iterator::*)() const noexcept>
(&std::map<int, std::string>::iterator::operator*),
std::invoke(
static_cast<std::map<int, std::string>::iterator
(std::map<int, std::string>::*)(int const&)>
(&std::map<int, std::string>::find),
std::invoke(&MyClass::dict, this), 3))), "meow");
我已经看不懂invoke啥意思了
这代码里还有赋值还有引用啥的太啰嗦,封装一下
namespace mfptr
{
template<typename Object, typename...Args>
decltype(auto) find(Object&& object, Args&&...args) {
return std::forward<Object>(object).find(std::forward<Args>(args)...);
}
template<typename Object>
decltype(auto) dereference(Object&& object) {
return *std::forward<Object>(object);
}
template<typename Object, typename Arg>
decltype(auto) assign(Object&& object, Arg&& arg) {
return std::forward<Object>(object) = arg;
}
}
std::invoke(
&mfptr::assign<std::string&, char const*>,
std::invoke(&std::pair<int const, std::string>::second,
std::invoke(
&mfptr::dereference<std::map<int, std::string>::iterator>,
std::invoke(
&mfptr::find<std::map<int, std::string>&, int>,
std::invoke(&MyClass::dict, this), 3))), "meow");
看个乐,可别学。
windows相关的api我不了解,这里贴出来感兴趣的自己看看吧
- Adventures in application compatibility: The case of the RAII type that failed to run its destructor
涉及到硬件交互,硬件直接抛异常 structured exception 导致RAII没执行成功?这里和COM相关。我没有搞懂
讲压缩动画的,不了解,这里贴出来感兴趣的自己看
一个字符可能有不同的表达方式,需要归一
"\u0065\u0301".normalize() == "\u00e9".normalize()
true
- asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群753302367和作者对线