C++ 中文周刊 第78期
从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
弄了个qq频道,手机qq点击进入
欢迎投稿,推荐或自荐文章/软件/资源等
可以贴在下一期草稿里 草稿链接
2020 09 02
资讯
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-08-31 第165期
文章
尽量让move 构造函数 noexcept, 不然用vector可能有问题,多copy
比如这个
struct Instrument {
int n_;
std::string s_;
Instrument(const Instrument&) = default;
// WRONG!!
Instrument(Instrument&& rhs)
: n_(std::exchange(rhs.n_, 0)),
s_(std::move(s_))
{}
// RIGHT!!
Instrument(Instrument&& rhs) noexcept
: n_(std::exchange(rhs.n_, 0)),
s_(std::move(s_))
{}
};
如果不是noexcept,vector的move判定内部的T不是is_nothrow_move_constructible, 那就构造复制一份,所以多了个拷贝。也就是博主说的vector pessimization问题
vector本身的搬迁move的多余动作,如果能nothrow,move就更简单
free没有size看上去是个巧妙的设计,实际上隐含了挺多脏活
协程背后都做了啥
有点意思
struct foo {
[[nodiscard]] foo(auto& resource) {}
};
struct [[nodiscard]] bar {};
auto fn() -> bar;
[[nodiscard]] auto fn2() -> bool;
int main(int, char** argv){
foo{argv}; // ignoring temp created by [[nodiscard]]
fn(); // ignoring return value with [[nodiscard]]
fn2(); // ignoring return value with [[nodiscard]]
}
老文,科普一下概念。
参数不是constexpr
consteval auto square(int x) -> int { return x * x; }
constexpr auto twice_square(int x) -> int { return square(x); }
编译不过。作者展示了一下编译期计算。哎又回去了。constexpr还是不够const
看个乐
介绍这几个flag
-march=native
肯定接触过吧
茴香豆的茴的20种写法
为什么大哥解bug这么熟练
视频
static constexpr 和 inline constexpr区别。inline constexpr能合并文件重复的数据,是文件级别,static是函数级别,并不能合并代码段
聪明的你想到了static inline constexpr。这个效果就是static constexpr。static限制了范围
开源项目需要人手
- asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群384042845和作者对线
- pika 一个nosql 存储, redis over rocksdb,非常需要人贡献代码胖友们, 感兴趣的欢迎加群294254078前来对线
工作招聘
寒冬了
看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!