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

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

作者头像
王很水
发布2022-05-10 19:28:25
1980
发布2022-05-10 19:28:25
举报
文章被收录于专栏:C++ 动态新闻推送

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

资讯

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

编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-05-04 第148期

GCC 12.1 Released

文章

代码语言:javascript
复制
#define FWD(...) static_cast<decltype(__VA_ARGS__)&&>(__VA_ARGS__)

[[nodiscard]] constexpr auto bind_back(const auto& func, auto... bound_args) {
    return [=] [[nodiscard]] (auto&&... unbound_args) {
        return func(FWD(unbound_args)..., bound_args...);
    };
}

int main() {
  //std::cout << std::bind_front(std::divides{}, 2.)(1.); // prints 2
  std::cout << std::bind_back (std::divides{}, 2.)(1.); // prints 0.5
}

range代码更干净

代码语言:javascript
复制
#include <algorithm>
#include <vector>
#include <iostream>
#include <ranges>   // new header!

int main() {
    const std::vector numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    auto even = [](int i) { return 0 == i % 2; };
 
    std::ranges::reverse_view rv{ 
        std::ranges::drop_view { 
            std::ranges::filter_view{ numbers, even }, 1 
        }
    };
    for (auto& i : rv)
        std::cout << i << ' ';;                                 
}

一般都是多版本不兼容的问题

windows环境,代码我就不贴了

对比各种测试工具查内存报错,测试报告 valgrind效果非常好

uClibc有bug,尽快升级。否则会被DNS污染

介绍std::is_standard_layout

代码语言:javascript
复制
#include <iostream>
#include <type_traits>

class A {
  int a;
  int b;
};


class C {
  C (int& ib) : b(ib) {}
  int a;
  int& b;
};


int main() {
  std::cout << std::boolalpha;
  std::cout << std::is_standard_layout_v<A> << '\n';
  std::cout << std::is_standard_layout_v<C> << '\n';
}
代码语言:javascript
复制
template<typename T>
constexpr T winrt_empty_value() noexcept
{
    if constexpr (std::is_base_of_v<winrt::Windows::Foundation::IUnknown, T>) {
        return nullptr;
    } else {
        return {};
    }
}

Virtual­Protect使用问题

视频

不要用const T做返回值的声明,会破坏move

代码语言:javascript
复制
struct S;
const S foo(); // bad

返回临时变量,临时变量不要用 const T,会破坏copy elision

代码语言:javascript
复制
struct S;
S foo() {
  const S s1;
  const S s2;
  if (/*some condition */) {
  	return s1;
  } else {
  	return s2;
  }
}

如果要在传进来的参数上改动返回,没必要const T

代码语言:javascript
复制
struct S;
S foo(const S s) {
	// do sth with s
  return s;
}

以及不要const 成员,先确定你的类是不是需要拷贝/move,如果是单例模式没啥问题,如果需要,别const成员

代码语言:javascript
复制
struct S {
 const int a;
}

新项目介绍/版本更新

本文永久链接

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++ 动态新闻推送 第61期
    • 资讯
      • 文章
        • 视频
          • 新项目介绍/版本更新
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档