c++14相关内容
在他的 CppCon 2014 talke “类型推断和你关心的原因"中,Scott Meyers 提出了一个问题,为什么在 C++11/C++14 标准中有关于 auto 和花括号初始化器的特殊规则(他的问题以 在 36m05s). §7.1.6.4/6 中定义了 auto 与花括号初始化列表结合的语义. 我想了想,也想不出用例.到目前为止,我看到的最接近的事情是 Bjarne St
..
我正在尝试在自动函数上使用 decltype 关键字: struct Thing {静态自动 foo() {返回 12;}使用 type_t =声明类型(foo());}; 我收到以下错误(gcc 7.4): :6:25: 错误:在扣除“auto"之前使用“static auto Thing::foo()"声明类型(foo());^:6:25: 错误:在扣除“auto"之前使
..
有: struct 值{模板静态 constexpr T 值{0};}; (0)ideone template构造东西{无效 x(){static_assert(TValue::template value == 0, "");}};int main() {Something{}.x();返回0;} 不能用 clang++ 3.6 编译. 错误:不能在没有模板参数列表的情况下引用变量
..
这是一个关于 返回类型推导 未记录的类内友元函数(在两种情况下都使用 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_;友元自动运算符
..
n3797 说: 第 7.1.6.4/14 节: 使用占位符类型的返回类型声明的函数不得是虚拟的 (10.3). 因此以下程序格式错误: struct s{虚拟汽车 foo(){}}; 我所能找到的理由是来自 n3638: 虚拟 允许虚拟的返回类型推导是可能的函数,但这会使覆盖检查和 vtable 复杂化布局,因此似乎最好禁止这样做. 谁能提供进一步的理由或
..
考虑一下这个 C++1y 代码 (noreloferb"现场示例): #include 自动 foo();int main() {std::cout
..
使用 Clang 3.5、3.6 或 3.7,带有标志 std=c++1y 以下代码无法编译: #include 自动 foo(自动栏){ 返回栏;}int main() {std::cout
..
我想(认为)我理解auto.decltype 也一样.但是,在 C++14 中,可以将诸如 decltype(auto) 之类的东西作为函数的返回类型.考虑以下几点: decltype(auto) foo(){整数 m = 1;返回 m;} 返回类型是int,一切都有意义. 然而, decltype(auto) foo(){整数 m = 1;返回(米);} 返回 int&(即对 in
..
如果函数模板返回 decltype(auto)(或使用 auto 的其他类型说明符)但返回语句格式错误,SFINAE 会产生结果吗?return 语句是否被认为是函数签名的直接上下文? N3690 草案中似乎没有任何要求.默认情况下,我猜 SFINAE 不适用. 这看起来很不幸,因为您可以编写一个函数来转发到另一个函数,但是您不能像手写那样以委托为条件使其存在.此外,如果没有 decl
..
如何对类成员使用自动类型推导?例如下面的代码 结构体A{自动 foo();//foo 在另一个文件中定义};int main(){一个;a.foo();} 其中 foo 具有返回类型 auto 导致以下错误: 错误:在定义之前不能使用具有推导返回类型的函数“foo"a.foo();^ 这个错误是可以理解的,因为编译器在不知道foo的定义的情况下无法知道它的返回类型是什么. 我的问题是
..
在 Scott Meyer 的书中 Effective Modern C++ on page 167(印刷版),他给出了以下示例: auto timeFuncInvocation = [](auto&& func, auto&&... params) {//启动定时器;std::forward(func)(std::forward(params)...);//停止计时器并记录经过的时间;};
..
我使用 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)"扣除“汽
..
在 C++14 中,为什么默认情况下具有推导返回类型的 lambda 函数会从返回类型中删除引用?IIUC,因为具有推导返回类型(没有显式尾随返回类型)的 C++14 lambda 函数的返回类型为 auto,这会删除引用(除其他外). 为什么会做出这个决定?在我看来,当您的 return 语句返回时删除引用就像一个陷阱. 这种行为给我带来了以下令人讨厌的错误: class Int
..
gcc 4.9 允许以下代码,但 gcc 4.8 和 clang 3.5.0 拒绝它. void foo(auto c){std::cout
..
泛型 lambda 如何在 C++14 标准中工作(auto 关键字作为参数类型)? 它是否基于 C++ 模板,其中对于每个不同的参数类型,编译器都会生成一个具有相同主体但替换类型的新函数(编译时多态),还是更类似于 Java 的泛型(类型擦除)? 代码示例: auto glambda = [](auto a) { return a;}; 解决方案 泛型 lambda 是在 C+
..
在 c++14 中引入了 decltype(auto) 习惯用法. 通常它的用途是允许 auto 声明在给定的表达式上使用 decltype 规则. 搜索成语的“好"用法示例,我只能想到以下内容(来自 Scott Meyers),即用于函数的返回类型推导: template//C++14decltype(auto) 抓取(ContainerType&& container, Inde
..
来自 C++ 标准库的 std::sort 算法(及其表亲 std::partial_sort 和 std::nth_element)是在大多数实现中更多基本排序算法的复杂和混合合并,例如选择排序、插入排序、快速排序、合并排序,或堆排序. 这里和姐妹网站(例如 https://codereview.stackexchange.com/)上有许多与错误、复杂性相关的问题以及这些经典排序算法实现
..
我有一个工作解析器,用于阅读棋盘游戏的位置描述(国际草稿,官方语法): #include #include 命名空间 x3 = boost::spirit::x3;auto const Colon = x3::lit(':');自动 const 逗号 = x3::lit(',');auto const dash = x3::lit('-');auto const dot = x3::lit('.
..
我正在尝试使用给定函数在编译时填充二维数组.这是我的代码: template结构表{整数数据[H][W];//std::array, W>数据;//这不起作用constexpr 表():数据{}{for (int i = 0; i 它工作得很好,table.data 在编译时正确填充. 但是,如果我将普通二维数组 int[H][W] 更改为 std::array, W>, 我在循环体中
..
如何使用索引序列或依赖于顺序索引的 lambda 构建 std::array? std::iota 和 std::generate 似乎相关,但我不确定如何使用它们来构建 std::array,而不是将它们应用到一个已经构造好的(如果数组的元素类型不是默认构造的,这是不可能的). 示例我想要 DRY 的代码类型: #include C级{民众:C(int x, float f) :
..