c++17相关内容

保证复制省略如何工作?

在 2016 年奥卢 ISO C++ 标准会议上,一项名为 Func()的返回值是一个等价于T()的纯右值,t直接被T(),就像你完成了T t = T(). 如果以任何其他方式使用纯右值,则纯右值将具体化一个临时对象,该对象将在该表达式中使用(如果没有表达式,则将其丢弃).因此,如果您执行 const T &rt = Func();,纯右值将实现一个临时的(使用 T() 作为初始化程序),其 ..
发布时间:2021-12-01 15:03:19 C/C++开发

什么是聚合和 POD 以及它们如何/为什么特别?

此常见问题解答是关于聚合和 POD 的,涵盖以下材料: 什么是聚合? 什么是POD(普通旧数据)? 它们有什么关系? 它们有何特别之处?为何如此? C++11 有哪些变化? 解决方案 阅读方法: 这篇文章比较长.如果您想了解聚合和 POD(普通旧数据),请花点时间阅读它.如果您只对聚合感兴趣,请仅阅读第一部分.如果您只对 POD 感兴趣,那么您必须首先阅读聚合的定义、含 ..
发布时间:2021-12-01 14:45:12 C/C++开发

从函数中正确传播 `decltype(auto)` 变量

(这是 "`decltype(auto)` 变量是否有任何实际用例?") 考虑以下场景 - 我想将一个函数 f 传递给另一个函数 invoke_log_return 它将: 调用f; 打印一些东西到stdout; 返回f的结果,避免不必要的复制/移动并允许复制省略. 请注意,如果 f 抛出,则不应向 stdout 打印任何内容.这是我目前所拥有的: template ..
发布时间:2021-11-30 18:22:09 C/C++开发

auto 是基于范围的 for 循环中的可选关键字吗?

我记得曾经有人告诉我, “在基于范围的 for 循环中不需要 auto.它会如果我们要删除它,不要在语言中含糊不清." 这是真的吗? 下面的代码是有效的 C++ 语法吗? for (elem : range){...} 我认为这已经是有效的语法,但是当我去编译时 clang++ --std=c++1z,我看到以下错误: 基于范围的 for 循环需要类型 for 循环变量对于( ..
发布时间:2021-11-30 18:17:13 C/C++开发

C++17中模板参数中auto的优点

在 C++17 中(可能)引入的模板参数中 auto 的优点是什么? 当我想实例化模板代码时,它只是auto的自然扩展吗? auto v1 = 常量;//v1 == 5, decltype(v1) 是 intauto v2 = 常数;//v2 == true, decltype(v2) 是 boolauto v3 = 常数;//v3 == 'a', decltype(v3) 是字 ..
发布时间:2021-11-30 18:09:33 C/C++开发

什么是合同(针对 C++17 提出的建议)?

我在 关于合同的思考B. Stroustrup 编写的 C++17 并协助进行了一次关于它们的小型演示,但我不确定我是否真的理解它们. 所以我有一些疑问,如果可以用一些例子来说明它们: 契约是否只是经典 assert() 的更好替代品,它们是否应该一起使用?对于软件开发人员来说,哪些合同真的很简单? 合同会影响我们处理异常的方式吗?如果是,我们应该如何使用例外和合同? 使用 ..
发布时间:2021-11-30 11:40:20 C/C++开发

指针相互转换与具有相同地址

N4659标准工作草案 说: [基本.化合物] 如果两个对象是指针可相互转换的,则它们具有相同的地址 然后注意到 一个数组对象和它的第一个元素是指针不可转换的,即使它们有相同的地址 使数组对象及其第一个元素不可相互转换的基本原理是什么?更一般地说,将指针可相互转换的概念与具有相同地址的概念区分开来的基本原理是什么?是不是哪里有什么矛盾? 似乎给定了这个语句序列 i ..
发布时间:2021-11-18 02:43:58 C/C++开发

C++:如何从 make_shared 部分推导出模板参数

为了规避对部分提供的显式模板参数的限制,我嵌入了我想从中推导出类模板参数 (Internal) 到第二个结构 (Container) 的结构. 我想让代码的用户能够创建例如结果类型的共享指针.通过在结构中编写我自己的 create 函数,这工作得很好. #include ///用于部分指定模板参数的容器模板结构容器{///包含类型,其中推导出模板参数.模板 结构内部{显式内部 ..
发布时间:2021-11-17 05:51:30 C/C++开发

在函数中使用非静态值作为默认参数

是否有一种很好的方法可以将非静态值作为函数中的默认参数?我看到过对同一问题的一些较旧的回答,这些回答总是以明确写出重载而告终.这在 C++17 中还有必要吗? 我想做的是做一些类似的事情 class C {const int N;//在构造函数中初始化void foo(int x = this->N){//做点什么}} 而不必写 class C {const int N;//在构造函数 ..
发布时间:2021-11-17 05:49:09 C/C++开发

<功能>上的clang 4构建错误用 c++1z

我刚刚将我的 arch linux 系统更新到最新的,其中包括 gcc 7.1.1.试图构建这个: #include int main(int argc, char** argv) {返回 1;} 使用命令 clang++ main.cpp -std=c++1z 导致错误: 在 main.cpp:1 包含的文件中:在/usr/bin/../lib64/gcc/x86_64-pc-linu ..
发布时间:2021-11-17 03:23:14 C/C++开发

Vcpkg 不能在带有 mingw 的 Windows 上工作

我实际上正在尝试使用 cmake 和 MinGW 在 windows 上制作 vcpkg,但似乎他不想使用 MinGW 这里是错误: -- 运行 vcpkg install - 完成-- C 编译器标识为 GNU 8.1.0-- CXX 编译器标识为 GNU 8.1.0-- 检测 C 编译器 ABI 信息-- 检测 C 编译器 ABI 信息 - 完成-- 检查工作的 C 编译器:C:/Pr ..
发布时间:2021-09-20 20:33:00 C/C++开发

Visual Studio:无法启动程序,系统找不到指定的文件 Visual Studio 错误?

这里我使用的是 Visual Studio 2019 社区版.我从文件-> 新建-> 现有项目中打开一个文件夹.但是每当我构建和运行我的程序时.它说 无法启动程序 'O:\1.Fourth学期\programminh\main\Debug\Main2.exe'系统找不到指定的文件 有很多程序.像bubble.cpp、binary.cpp,但它运行Main2.exe. 这是我的 l ..
发布时间:2021-09-18 20:06:11 C/C++开发

自己的向量分配实现

我正在通过编写所有默认函数来实现像向量一样的 stl.并且有一个问题,我不明白为什么它为简单类型调用 ragne 版本的assign 并且不默认.下面是实现代码:向量.h void assign(size_t count, const T& value){//默认版本无效分配(size_t 计数,const T& 值){if(this->_size allocator.deallocate(th ..
发布时间:2021-09-17 19:12:11 C/C++开发

分配 std::vector到 std::vector无需复制内存

我有一个返回 std::vector 的函数 我知道 std::byte 既不是字符类型也不是整数类型,并且只能通过类型转换才能将其转换为 char.到目前为止一切顺利. 所以我想(在我知道向量只包含字符数据的情况下)从 std::vector 转移底层缓冲区的所有权. 到 std::vector 使用 std::move,以避免复制整个底层缓冲区. 当我尝试 ..
发布时间:2021-09-17 19:09:08 C/C++开发