从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
周刊项目地址|在线地址 |知乎专栏 | 腾讯云+社区 |
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
标准委员会动态/一些比较出名的项目release/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-01-05 第131期
介绍了2023的各种提案亮点
之前也说过,比如Deducing this
,比如多维数组 operator , auto代替decay_copy ,123uz后缀 stack_trace库,加强的optional,move_only_function(function_ref), string的细致支持 resize_and_overwrite
这个观点不一定对 但各种index之类的尽可能的用unsigned,毕竟signed各种溢出问题太坑爹了
感谢lh_mouse补充
signed和unsigned区别就是信息,unsigned少一部分信息,这个信息在比较中可能是非常重要的。另外对于编译器而言,这俩最终的优化效果是一样的
Named parameters for C++11 with variadic templates vs a language feature
来段python解释下
parser.add_argument(
'-f', metavar='FILE', type=argparse.FileType('r'), default=sys.stdin,
dest='file', help='path to file containing the csv benchmark data')
这种字段名=值的用法,怎么在c++中实现?
猥琐方法,c
struct Named
{
int size; int defaultValue; bool forced; bool verbose;
Named() : size(0), defaultValue(0), forced(false), verbose(false) {};
};
void foo(Named);
void bar()
{
foo({ .size = 44, .forced = true});
}
但是我们想要这样
void bar()
{
foo(size: 44, forced: true);
}
只能说,有提案了 D2288R0 Proposal of Designated Arguments DRAFT 2 如果能用上确实挺爽的,尤其是构造函数,语意更清晰
这种指定也能解决构造函数默认参数的顺序引入的问题,比如f(int a=1,b=1,c=1,d=1,e=1), 我想指定b/d这两个值,当前只能把前面的ac都补上,这就非常难受
讲了c++函数近年来的变化,比如各种关键字修饰
template <typename T>
T add(T a, T b)
{
return a + b;
}
template <>
int add<int>(int a, int b) = delete;
int main()
{
add(1, 2); // error, this specialization is deleted
}
返回值推导
template <typename T, typename U>
auto add(T a, U b)
{
return a + b;
}
以及最新的consteval,concept限制等等
auto add(std::integral auto a, std::integral auto b)
{
return a + b;
}
甚至虚函数也能consteval
struct magic
{
constexpr virtual int def() const { return 0; }
};
struct programming_magic : public magic
{
constexpr int def() const override { return 42; }
};
constexpr int initval(magic const & m)
{
return m.def() + 1;
}
int main()
{
constexpr programming_magic pm;
int arr[initval(pm)] = {0};
}
以及最新的协程
#include <cppcoro/task.hpp>
cppcoro::task<> consume_items(int const n)
{
int i = 1;
for(auto const& s : produce_items())
{
print_time();
std::cout << "consumed " << s << '\n';
if (++i > n) break;
}
co_return;
}
这俩我愣没看明白到底啥bug
32位时间戳现在已经不可用了
December 31, 2021 at 23:59 表示成 2112312359. 32位最大是 2147483647)
January 1, 2022 at 00:00, 表示成 220101000 已经溢出了
TODO:看不懂兄弟们
可能有第三方实现的冲突。所以别打开命名空间
又一个linq库,作者认为range还是很难用
几个使用例子
std::vector<int> input1 = {1337, 42, 128};
std::vector<std::string> input2 = {"1337", "42", "128"};
std::unordered_map<int, std::string> output = CXXIter::from(input1)
.copied()
.zip(CXXIter::from(input2).copied())
.collect<std::unordered_map>();
// output == { {1337, "1337"}, {42, "42"}, {128, "128"} }
constexpr cbi::Bounded<int32_t, 1, 10> fst{ 2 };
constexpr cbi::Bounded<int32_t, 1, 6> sec{ 2 };
auto res = fst + sec;
// Bounds are calculated automatically based on the operation
using expected_t = cbi::Bounded<int32_t, 2, 16>;
static_assert(std::same_as<expected_t, decltype(res)>);
assert(res.get() == 4); // extract runtime value
const std::optional shrinked = res.shrink_bounds<1, 5>(); // shrink bounds
assert(shrinked.has_value());
不过真的有人用的到吗
这个是之前发过的招聘信息,再挂一周
我们是 TiDB 与 TiFlash 的 compute engine team,包含了基于 Go 的 OLTP 执行引擎与基于 C++ 的 MPP 执行引擎,感兴趣的同学请私信联系(成员分布在上海、广州、杭州、北京、深圳)。(全日制实习生可能得晚点才有 HC)
这里是jd:
看着挺有意思,感兴趣的可以看看
昆仑数据库,魔改mysql的,还支持远程工作,友情推荐一波
现在mysql的代码已经很现代c++了
开发深度学习编译器,而且他们也支持远程工作,c++的,友情推荐一波