C 中文周刊 第92期
资讯
十一月邮件汇总
大部分都是能力补充,比如views::enumerate
, 比如new size信息?
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-01-05 第131期
OSDT2022 第14届开源开发工具大会议程
周末没事可以看看,c 的东西很多,llvm/编译器链接器 等等
B站直播
PLCT开放日和OSDT大会都会通过B站进行直播。直播地址:
https://live.bilibili.com/10339607 腾讯会议(网络研讨会)
吴伟 邀请您参加腾讯会议网络研讨会(Webinar)
代码语言:javascript复制会议主题:2022开源开发工具大会
会议时间:2022/12/10 09:30-18:00 (GMT 08:00) 中国标准时间 - 北京
重复周期:2022/12/10-2022/12/11 09:30-18:00, 每天
点击专属链接入会,或添加至会议列表:
https://meeting.tencent.com/dw/sOYndcvZQ9Ua
会议号: #腾讯会议:569-2778-2379
文章
- C 智能指针最佳实践&源码分析
看个乐,感觉都知道了
- asio c 20 coroutines support源码分析
学习一波,如何把coroutine和asio结合 (asio还是难用)
- 从tuple谈起-浅谈c 中空基类优化的使用
空基类优化,另外,现在是2022了,要用[[no_unique_address]]
- Faster base64 in curl
一个代码调优
- c tip of week
struct s {
static constexpr auto operator()() { return 1; }
};
auto l = [] static { return 2; };
static_assert(3 == s{}() l());
static_assert(3 == s::operator()()
decltype(l)::operator()());
兼容能力补充
- What’s so hard about views::enumerate
如何实现 views::enumerate
- New C Sender Library Enables Portable Asynchrony
第一个支持std::execution
设计的库?
- compiler can’t find source file in path that is longer than 255 characters
msvc尴尬的bug
- C 23: std::out_ptr and std::inout_ptr
封c接口用的
代码语言:javascript复制#include <iostream>
#include <memory>
void old_c_api(int** p) {
*p = new int{42};
}
int main() {
auto pi = std::make_unique<int>(51);
old_c_api(std::out_ptr(pi));
std::cout << *pi << 'n';
}
pi的释放交给out_ptr了。如果是std::shared_ptr
?
#include <iostream>
#include <memory>
void old_c_api(int** p) {
*p = new int{42};
}
int main() {
auto pi = std::make_shared<int>(51);
// error C2338: static_assert failed: 'out_ptr_t with shared_ptr requires a deleter (N4892 [out.ptr.t]/3)'
// old_c_api(std::out_ptr(pi));
old_c_api(std::out_ptr(pi, std::default_delete<int>()));
std::cout << *pi << 'n';
}
- Compile-Time Strings
编译期字符串一些操作。这个文章是吴咏炜写的,投accu了
长度,这个之前也说过
代码语言:javascript复制 constexpr size_t length(const char* str) {
return char_traits<char>::length(str);
}
查找
代码语言:javascript复制 constexpr const char*
find(const char* str, char ch) {
return char_traits<char>::find(
str, length(str), ch);
}
substr
代码语言:javascript复制constexpr auto substr(string_view sv,
size_t offset, size_t count) {
array<char, count 1> result{};
copy_n(&sv[offset], count, result.data());
return result;
}
template <size_t Count>
constexpr auto substr(const char* str,
size_t offset = 0){
array<char, Count 1> result{};
for (size_t i = 0; i < Count; i) {
result[i] = str[offset i];
}
return result;
}
字符串模版参数
代码语言:javascript复制template <char... Cs>
struct compile_time_string {
static constexpr char value[]{Cs..., '