资讯
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态 本周更新 第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也受影响,如果使用,务必升级
文章
- Did you know that C 20 added std::ranges::{all_of, any_of, none_of} algorithms?
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版本
- go style协程设计
作者写了个库,很有意思
- TCMalloc引起的 bad_alloc bug 记录
查bug要先看issue和release信息。不过tcmalloc有很多都替换成mimalloc和jemalloc了。
- 拥抱xmake,Win C 编译新体验
xmake真的挺好用的。自己构建小东西,推荐使用
- 技术简报(第三期)
赵工的这个整理挺不错的。会介绍一些系统知识
- Use strong types instead of bool parameters
老生常谈了,bool语义不清晰,要是多个参数都是bool那可要了老命了,最好不要用 几种解决办法,用enum不同类型区分,或者写注释,多写注释
- Fuzzy search for C Reference, Qt documentation and more from shell, Vim or Neovim
主要是使用zeal的cli工具嵌入,最近才知道zeal支持linux了。可以下载cpp的文档然后用zeal-cli来搜索,省一个搜索的功夫
- Design Patterns VS Design Principles: Abstract Factory
介绍工厂模式怎么组织代码的。这里不展开了。
- The std::invoke function does more than invoke functions
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
事实上得这么用
代码语言:javascript复制std::invoke(&S::do_something, s)();
一旦理解了这种用法,代码就有了新的写法,面向invoke编程
代码语言:javascript复制// 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啥意思了
这代码里还有赋值还有引用啥的太啰嗦,封装一下
代码语言:javascript复制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");
看个乐,可别学。
- All Windows threadpool waits can now be handled by a single thread
windows相关的api我不了解,这里贴出来感兴趣的自己看看吧
- Adventures in application compatibility: The case of the RAII type that failed to run its destructor
涉及到硬件交互,硬件直接抛异常 structured exception 导致RAII没执行成功?这里和COM相关。我没有搞懂
- Compressing looping animation clips
讲压缩动画的,不了解,这里贴出来感兴趣的自己看
- String representations are not unique: learn to normalize!
一个字符可能有不同的表达方式,需要归一
代码语言:javascript复制 "u0065u0301".normalize() == "u00e9".normalize()
true
新项目介绍/版本更新
- wxWidgets - wxWidgets 3.1.6 Released
看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!
本文永久链接
代码语言:txt复制 This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/057.md).