c++14相关内容

为什么在 C++11/C++14 中对自动和花括号初始化器有特殊的类型推导规则?

在他的 CppCon 2014 talke “类型推断和你关心的原因"中,Scott Meyers 提出了一个问题,为什么在 C++11/C++14 标准中有关于 auto 和花括号初始化器的特殊规则(他的问题以 在 36m05s). §7.1.6.4/6 中定义了 auto 与花括号初始化列表结合的语义. 我想了想,也想不出用例.到目前为止,我看到的最接近的事情是 Bjarne St ..
发布时间:2021-11-30 18:19:39 C/C++开发

编译器不能推导出返回类型?

我正在尝试在自动函数上使用 decltype 关键字: struct Thing {静态自动 foo() {返回 12;}使用 type_t =声明类型(foo());}; 我收到以下错误(gcc 7.4): :6:25: 错误:在扣除“auto"之前使用“static auto Thing::foo()"声明类型(foo());^:6:25: 错误:在扣除“auto"之前使 ..
发布时间:2021-11-30 18:18:38 C/C++开发

类内友元函数的返回类型推导

这是一个关于 返回类型推导 未记录的类内友元函数(在两种情况下都使用 Clang 3.4 SVN 和 g++ 4.8.1 以及 std=c++1y)在链接的工作文件中 #include 结构A{国际a_;友元自动运算符==(A const& L, A const& R){返回 L.a_ == R.a_;//a_ 是 int 类型,所以应该返回 bool}};模板结构体B{国际b_;友元自动运算符 ..
发布时间:2021-11-30 18:18:01 C/C++开发

为什么虚函数不能使用返回类型推导?

n3797 说: 第 7.1.6.4/14 节: 使用占位符类型的返回类型声明的函数不得是虚拟的 (10.3). 因此以下程序格式错误: struct s{虚拟汽车 foo(){}}; 我所能找到的理由是来自 n3638: 虚拟 允许虚拟的返回类型推导是可能的函数,但这会使覆盖检查和 vtable 复杂化布局,因此似乎最好禁止这样做. 谁能提供进一步的理由或 ..
发布时间:2021-11-30 18:16:03 C/C++开发

为什么 decltype(auto) 在这里返回一个引用?

我想(认为)我理解auto.decltype 也一样.但是,在 C++14 中,可以将诸如 decltype(auto) 之类的东西作为函数的返回类型.考虑以下几点: decltype(auto) foo(){整数 m = 1;返回 m;} 返回类型是int,一切都有意义. 然而, decltype(auto) foo(){整数 m = 1;返回(米);} 返回 int&(即对 in ..
发布时间:2021-11-30 18:14:40 C/C++开发

SFINAE 和 decltype(自动)

如果函数模板返回 decltype(auto)(或使用 auto 的其他类型说明符)但返回语句格式错误,SFINAE 会产生结果吗?return 语句是否被认为是函数签名的直接上下文? N3690 草案中似乎没有任何要求.默认情况下,我猜 SFINAE 不适用. 这看起来很不幸,因为您可以编写一个函数来转发到另一个函数,但是您不能像手写那样以委托为条件使其存在.此外,如果没有 decl ..
发布时间:2021-11-30 18:14:10 C/C++开发

类成员上下文中的 `auto` 返回类型

如何对类成员使用自动类型推导?例如下面的代码 结构体A{自动 foo();//foo 在另一个文件中定义};int main(){一个;a.foo();} 其中 foo 具有返回类型 auto 导致以下错误: 错误:在定义之前不能使用具有推导返回类型的函数“foo"a.foo();^ 这个错误是可以理解的,因为编译器在不知道foo的定义的情况下无法知道它的返回类型是什么. 我的问题是 ..
发布时间:2021-11-30 18:14:03 C/C++开发

在 C++14 中扣除“auto"之前使用“auto func(int)"

我使用 C++14 在 GCC 中编译了以下程序. #include 使用命名空间标准;自动功能(int i);int main(){自动 ret = func(5);返回0;}自动功能(int i){如果(我== 1)返回我;别的返回 func(i-1) + i;} 但是,我收到以下错误. 在函数“int main()"中:8:16:错误:之前使用过“auto func(int)"扣除“汽 ..
发布时间:2021-11-30 18:13:12 C/C++开发

为什么 lambda 函数默认删除推导的返回类型引用?

在 C++14 中,为什么默认情况下具有推导返回类型的 lambda 函数会从返回类型中删除引用?IIUC,因为具有推导返回类型(没有显式尾随返回类型)的 C++14 lambda 函数的返回类型为 auto,这会删除引用(除其他外). 为什么会做出这个决定?在我看来,当您的 return 语句返回时删除引用就像一个陷阱. 这种行为给我带来了以下令人讨厌的错误: class Int ..
发布时间:2021-11-30 18:12:07 C/C++开发

泛型 lambda 如何在 C++14 中工作?

泛型 lambda 如何在 C++14 标准中工作(auto 关键字作为参数类型)? 它是否基于 C++ 模板,其中对于每个不同的参数类型,编译器都会生成一个具有相同主体但替换类型的新函数(编译时多态),还是更类似于 Java 的泛型(类型擦除)? 代码示例: auto glambda = [](auto a) { return a;}; 解决方案 泛型 lambda 是在 C+ ..
发布时间:2021-11-30 18:09:22 C/C++开发

decltype(auto) 有哪些用途?

在 c++14 中引入了 decltype(auto) 习惯用法. 通常它的用途是允许 auto 声明在给定的表达式上使用 decltype 规则. 搜索成语的“好"用法示例,我只能想到以下内容(来自 Scott Meyers),即用于函数的返回类型推导: template//C++14decltype(auto) 抓取(ContainerType&& container, Inde ..
发布时间:2021-11-30 18:08:51 C/C++开发

如何在现代 C++ 中实现经典的排序算法?

来自 C++ 标准库的 std::sort 算法(及其表亲 std::partial_sort 和 std::nth_element)是在大多数实现中更多基本排序算法的复杂和混合合并,例如选择排序、插入排序、快速排序、合并排序,或堆排序. 这里和姐妹网站(例如 https://codereview.stackexchange.com/)上有许多与错误、复杂性相关的问题以及这些经典排序算法实现 ..
发布时间:2021-11-26 23:51:12 C/C++开发

为什么非常量 std::array::operator[] 不是 constexpr?

我正在尝试使用给定函数在编译时填充二维数组.这是我的代码: template结构表{整数数据[H][W];//std::array, W>数据;//这不起作用constexpr 表():数据{}{for (int i = 0; i 它工作得很好,table.data 在编译时正确填充. 但是,如果我将普通二维数组 int[H][W] 更改为 std::array, W>, 我在循环体中 ..
发布时间:2021-11-18 05:03:04 C/C++开发

如何用索引序列构造一个 std::array ?

如何使用索引序列或依赖于顺序索引的 lambda 构建 std::array? std::iota 和 std::generate 似乎相关,但我不确定如何使用它们来构建 std::array,而不是将它们应用到一个已经构造好的(如果数组的元素类型不是默认构造的,这是不可能的). 示例我想要 DRY 的代码类型: #include C级{民众:C(int x, float f) : ..
发布时间:2021-11-18 05:01:08 C/C++开发