69得票5回答
GCC是否支持C++20的std::format?

如果不支持,你知道哪个编译器或版本可以吗? 查看cppreference/format。

68得票5回答
C++模块是什么?

我一直在关注C++标准化,最近接触到了C++模块的概念。但是我找不到一篇好的文章来介绍它。它到底是什么?

68得票7回答
如何在可变参数模板函数中使用source_location?

C++20功能std::source_location用于捕获函数调用的上下文信息。当我尝试将其与可变模板函数一起使用时,遇到了一个问题:我找不到放置source_location参数的位置。 以下代码不起作用,因为可变参数必须在最后: // doesn't work template &...

65得票2回答
为什么在C++20中要使用`std::bind_front`而不是lambda表达式?

如同一个类似措辞的问题所提到的 (为什么在c++14中使用std::bind而不是lambda表达式?),答案是——没有理由(并且还提到了为什么使用lambda更好)。 我的问题是——如果在C++14中已经不需要使用bind了,为什么标准委员会觉得有必要在C++20中添加std::bind_f...

64得票2回答
C++20中的bit_cast与reinterpret_cast的区别

根据ISO C++委员会的最后一次会议,bit-cast将在C++20标准中引入。 我知道reinterpret_cast由于type aliasing rules不适用于这个任务,但我的问题是为什么他们选择不扩展reinterpret_cast来处理对象的位序列表示,并更喜欢将这个功能作为...

63得票3回答
为什么 std::bit_width 对值 0 返回 0 而不是返回 1?

std::bit_width函数用于计算整数x的二进制表示所需的最小位数,公式为 1+floor(log(x))。 为什么在值为0时std::bit_width函数返回0?因为表示0所需的二进制位数为1,所以它应该返回1才对。 此外,我认为公式中的1是一个偏移量。

63得票3回答
C++20的新特性[[no_unique_address]]是什么?

我已经多次阅读了C++20的新特性no_unique_address,但我希望有人能够更好地解释并通过一个例子说明,这个例子应该比下面从C++参考手册中摘录的示例更清晰易懂。 Explanation 适用于声明非静态数据成员的名称,该名称不是位域。 表示此数据成员不需要与其类的所有其他非静态...

62得票3回答
三路比较运算符和减法有何不同?

C++20中引入了新的比较运算符<=>,但我认为在大多数情况下,简单的减法运算就可以胜任: 有一个新的比较运算符<=>,但是我认为在大多数情况下使用简单的减法即可。int my_strcmp(const char *a, const char *b) { wh...

61得票2回答
为什么在C++20中,许多标准库类型都删除了operator!=运算符?

根据cppreference,C++20将删除std::type_info::operator!=,然而std::type_info::operator==似乎将保留。 这是什么原因呢?我可以同意比较不等价值是没有意义的,但是比较相等值也同样没有意义,不是吗? 同样,许多其他标准库类型的o...

61得票1回答
新的迭代器要求

我注意到现在大多数容器都要求它们的::iterator类型满足LegacySomethingIterator而不是SomethingIterator。例如,std::vector<>::iterator现在需要: iteratorLegacyRandomAccessIterat...