c++14相关内容

原始 new[]/delete[] 与 std::vector 的优化

让我们来处理非常基本的动态分配内存.我们取一个 3 的向量,设置它的元素并返回向量的总和. 在第一个测试用例中,我使用带有 new[]/delete[] 的原始指针.在第二个我使用 std::vector: #include int main(){//int *v = new int[3];//(1)auto v = std::vector(3);//(2)for (int i = 0; ..
发布时间:2021-12-21 13:34:02 C/C++开发

投入 constexpr 函数

以下代码在 clang++ 3.7.0 下编译,但被 g++ 5.3.1 拒绝.两者都有 -std=c++14 选项.哪个编译器是正确的?任何人都知道标准中的哪里谈论这个?谢谢. #include 使用命名空间标准;constexpr int f(int n) {if (n 输出 [隐藏] g++ -std=c++14 c.cppc.cpp:在函数‘constexpr int f(int) ..
发布时间:2021-12-18 23:26:03 C/C++开发

具有非静态成员初始值设定项的类的 C++11 聚合初始化

标准中是否允许: 结构体A{int a = 3;整数 b = 3;};一个{0,1};//??? 这个类还聚合吗?clang 接受此代码,但 gcc 不接受. 解决方案 在 C++11 中,具有类内成员初始值设定项使结构/类不是聚合 —然而,这在 C++14 中有所改变.当我第一次遇到它时,我发现这是令人惊讶的,这种限制的基本原理是类内初始化器与用户定义的构造器非常相似,但反论点是没有 ..
发布时间:2021-12-18 22:35:11 C/C++开发

后备可变参数构造函数 - 为什么这有效?

在回答这个问题时,关于尝试构造一个可变参数转发引用构造函数,只有在没有其他构造函数时才应调用该构造函数有效的.也就是说,如果有: C(const char*, size_t) { }//1模板 C(T&&...) { }//2 我们希望 C c1{"abc", 2}; 调用 (1),尽管需要转换,但是 C c2{1, 2, 3}; 调用 (2),因为 ( ..
发布时间:2021-12-13 19:19:49 C/C++开发

std::make_index_sequence 和 std::index_sequence 的细节

我很喜欢使用可变参数模板,并开始摆弄这个新功能.我试图了解 std::index_sequence 的实现细节(用于元组实现).我在那里看到了示例代码,但我真的想要一步一步地解释 std::index_sequence 是如何编码的,以及每个阶段有问题的元编程原理.想想真的愚蠢的:) 解决方案 我在那里看到了示例代码,但我真的想要一步一步地解释 index_sequence 是如何编码 ..

C++14 变量模板:它们的目的是什么?任何使用示例?

C++14 将允许创建模板化的变量.通常的例子是一个变量 'pi',它可以被读取以获得各种类型的数学常数 π 的值(int 为 3;float 可能是最接近的值等) 除了我们可以通过将变量包装在模板化结构或类中来拥有此功能之外,这如何与类型转换混合?我看到一些重叠. 除了 pi 示例之外,它如何处理非常量变量?任何使用示例来了解如何充分利用此类功能及其目的是什么? 解决方案 ..
发布时间:2021-12-13 18:48:01 C/C++开发

static_assert 依赖于非类型模板参数(gcc 和 clang 上的不同行为)

template 结构搭便车{static_assert(sizeof(answer) != sizeof(answer), "无效答案");};模板 struct Hitchhiker{}; 在尝试使用 static_assert 禁用通用模板实例化时,我发现 clang 中的上述代码即使没有实例化模板也会生成断言错误,而 gcc 仅在使用 42 以外的参数实例化 Hitchhik ..
发布时间:2021-12-13 18:28:32 C/C++开发

自 C++17 以来,具有正确地址和类型的指针是否仍然始终是有效指针?

(参考 这个问题和答案.) 在C++17标准之前,中包含了下面这句话[basic.compound]/3: 如果类型 T 的对象位于地址 A,则称其值为地址 A 的类型为 cv T* 的指针指向该对象,无论该值是如何获得的. 但从 C++17 开始,这句话已经删除. 例如我相信这句话定义了这个示例代码,并且因为 C++17 这是未定义的行为: alignas(int) ..
发布时间:2021-12-13 13:03:40 C/C++开发

C++ 中的并行循环

我想知道是否有一种简单直接的方法可以在 C++ 中并行计算诸如 for 和基于范围的 for 循环之类的循环.你会如何实施这样的事情?我从 Scala 知道 map、filter 和 foreach 函数,也许也可以并行执行这些函数?有没有一种简单的方法可以在 C++ 中实现这一点? 我的主要平台是 Linux,但如果它可以跨平台工作就好了. 解决方案 借助 C++17 中的并行算法 ..
发布时间:2021-12-11 12:25:11 C/C++开发

构建 qmake 项目时如何使用 C++14 功能?

我目前在我的 Qt 应用程序中使用 C++11 功能.但是,我想在我的应用程序中使用一些新的 C++14 特性. 要在Qt应用程序中启用C++11,只需在qmake项目文件中添加一行,即: CONFIG += c++11 或者对于早期版本: QMAKE_CXXFLAGS += -std=c++1y 我已经尝试用 C++14 做同样的事情,但是没有用.我像这样更改了 qmake 项目的 ..
发布时间:2021-12-09 16:41:54 C/C++开发

`void_t` 是如何工作的

我在 Cppcon14 上观看了 Walter Brown 关于现代模板编程的演讲(第一部分,第二部分),在那里他展示了他的 void_t SFINAE 技术. 示例: 给定一个简单的变量模板,如果所有模板参数都格式正确,则计算结果为 void: 模板 以及以下特征,用于检查名为 member 的成员变量是否存在: 模板或丢弃(sfinae)模板结构 has_member>: std ..
发布时间:2021-12-01 15:36:33 C/C++开发

实现 C++14 make_integer_sequence

我尝试实现 C++14别名模板make_integer_sequence,它简化了类模板integer_sequence. 模板struct integer_sequence{typedef T value_type;static constexpr size_t size() noexcept { return sizeof...(I) ;}};模板;//仅用于说明. 要实现make_int ..
发布时间:2021-12-01 15:24:03 C/C++开发

C++ 标准是否在 C++14 中关于不确定值和未定义行为的使用发生了变化?

如初始化是否需要左值右值转换?是 int x = x; UB 吗? C++ 标准在 3.3.2 声明点 部分有一个令人惊讶的例子,其中int 用它自己的不确定值初始化: int x = 12;{ int x = x;} 这里第二个 x 用它自己的(不确定的)值初始化.— 结束示例 ] Johannes 对这个问题的回答表明是未定义的行为,因为它需要左值到右值的转换. 在最新的 C+ ..
发布时间:2021-12-01 15:03:40 C/C++开发

“decltype(auto)"变量是否有任何实际用例?

从我的个人经验和咨询诸如 有哪些用途的问题的答案decltype(auto)?我可以找到许多将 decltype(auto) 作为函数返回类型占位符的有价值的用例. 然而,我很难为 decltype(auto) 变量想到任何有效的(即有用的、现实的、有价值的)用例.想到的唯一可能性是存储返回 decltype(auto) 的函数的结果以供以后传播,但 auto&& 也可以在那里使用,并且会更 ..
发布时间:2021-11-30 18:21:51 C/C++开发