标签: c++26

constexpr 浮点数学有何含义?

从 C++11 开始,我们可以在编译时进行浮点数学运算。C++23 和 C++26 添加了constexpr一些函数,但不是全部。

constexpr一般来说,浮点数学很奇怪,因为结果并不完全准确。然而,constexpr代码应该始终提供一致的结果。C++ 如何解决这个问题?

问题

  • constexpr浮点数学 是如何工作的?
    • 所有编译器的结果都相同吗?
    • 对于同一编译器,编译时和运行时的结果是否相同?
  • 为什么有些功能有效constexpr,而其他功能则不然(例如std::nearbyint

c++ floating-point constexpr c++23 c++26

34
推荐指数
2
解决办法
2532
查看次数

C++26 中静态反射需要什么语法?

据我所知,静态反射目前在 C++26 的路线图上。

\n

反射TS提出了基于类型的语法,但同时也提出了基于值的语法。在P2560 Mat\xc3\xba\xc5\xa1 Chochl\xc4\xb1\xcc\x81k 中,对两种方法进行了比较。

\n

是否已经决定哪种方法可能标准化?

\n

c++ reflection static-reflection c++26

9
推荐指数
1
解决办法
2142
查看次数

C++26 中 _ 下划线变量的规则是什么,什么是与名称无关的声明?

当我编译以下代码时,我收到警告(https://godbolt.org/z/Tx7v6jWf1):

void foo() {
    int _;
    // warning: name-independent declarations only available with
    //           '-std=c++2c' or '-std=gnu++2c' [-Wc++26-extensions]
    int _;
}
Run Code Online (Sandbox Code Playgroud)

C++26 中的变量到底发生了什么变化_,什么是名称独立声明

c++ local-variables identifier c++26

7
推荐指数
1
解决办法
204
查看次数

C++26 中是否允许 TemplatePack<>...[I]

包索引是在 C++26 中引入的,我希望此功能能够对元编程产生重大影响,特别是对于索引包,否则需要解决方法。

由于包索引说明符的语法是:

typedef-name ... [ expression ] 
Run Code Online (Sandbox Code Playgroud)
  • 其中typedef-nameidentifiersimple-template-id

有了上述信息,是否允许:

template <typename>
using apply_t = bool;

// #1
template <typename... Args>
using A = apply_t<Args>...[0];
// can be reworked with: apply_t<Args...[0]>

// #2
template <template <typename...> typename... Temps>
using B = Temps<>...[0]
// no other way other than this because 'Temps...[0]<>' is not allowed yet (?)
Run Code Online (Sandbox Code Playgroud)

c++ parameter-pack c++26

6
推荐指数
1
解决办法
100
查看次数

任何范围视图适配器类型(来自“std::views”)是否依赖于堆分配?

我知道至少大多数Ranges 视图类型不需要任何堆分配。例如,您可以在堆栈上获取一个 C 数组并通过管道将其通过,std::views::take(42)而不会导致任何堆分配。

但我知道有很多模糊的视图适配器,例如,,,views::join每年都会有更多的视图适配器出现,仅仅因为今天大多数视图适配器显然不分配(在常见情况下)并不意味着所有视图适配器永远不会分配。views::istreamviews::chunk_by

通过类比:我知道大多数标准库算法不需要任何堆分配。例如,您可以在堆栈上获取一个 C 数组,并且std::ranges::partition不会引起任何堆分配。但有一些算法(std::inplace_mergestd::stable_sortstd::stable_partition;及其std::ranges对应算法)确实执行运行时堆分配。我们已经有一个 SO 问题跟踪哪些算法堆分配。

因此,我要求一个最新的答案(甚至可能在将来维护/更新):在任何主要 STL 供应商的实现上,是否有任何std::views::适配器需要堆分配?如果有,是哪些以及为什么?

c++ stl standard-library c++20 c++26

5
推荐指数
1
解决办法
110
查看次数