从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
周刊项目地址|在线地址 |知乎专栏 | 腾讯云+社区 |
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-05-04 第148期
#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代码更干净
#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污染
#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';
}
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 {};
}
}
VirtualProtect使用问题
不要用const T做返回值的声明,会破坏move
struct S;
const S foo(); // bad
返回临时变量,临时变量不要用 const T,会破坏copy elision
struct S;
S foo() {
const S s1;
const S s2;
if (/*some condition */) {
return s1;
} else {
return s2;
}
}
如果要在传进来的参数上改动返回,没必要const T
struct S;
S foo(const S s) {
// do sth with s
return s;
}
以及不要const 成员,先确定你的类是不是需要拷贝/move,如果是单例模式没啥问题,如果需要,别const成员
struct S {
const int a;
}