前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 动态新闻推送 第57期

C++ 动态新闻推送 第57期

作者头像
王很水
发布2022-04-11 08:09:01
3980
发布2022-04-11 08:09:01
举报
文章被收录于专栏:C++ 动态新闻推送

资讯

标准委员会动态/ide/编译器信息放在这里

编译器信息最新动态 本周更新 第144期

安全问题报告

文章

代码语言:javascript
复制
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来搜索,省一个搜索的功夫

介绍工厂模式怎么组织代码的。这里不展开了。

代码语言:javascript
复制
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");

看个乐,可别学。

windows相关的api我不了解,这里贴出来感兴趣的自己看看吧

涉及到硬件交互,硬件直接抛异常 structured exception 导致RAII没执行成功?这里和COM相关。我没有搞懂

讲压缩动画的,不了解,这里贴出来感兴趣的自己看

一个字符可能有不同的表达方式,需要归一

代码语言:javascript
复制
 "\u0065\u0301".normalize() == "\u00e9".normalize()
true

新项目介绍/版本更新

看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!

本文永久链接

代码语言:txt
复制
     This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/057.md).
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 资讯
    • 安全问题报告
    • 文章
    • 新项目介绍/版本更新
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档