从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
周刊项目地址|在线地址 |知乎专栏 | 腾讯云+社区 |
欢迎投稿,推荐或自荐文章/软件/资源等
可以贴在下一期草稿里 草稿链接
2022 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看上去是个巧妙的设计,实际上隐含了挺多脏活
实际上,malloc/free/realloc等等,这些api还是太低层太精细了。对于使用者心理负担很大。
感谢@lh_mouse补充
协程背后都做了啥
有点意思
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限制了范围
当然,-fmerge-contants能从另一个层面解决这个问题
感谢@lh_mouse补充
寒冬了