c++17相关内容

C++17折叠表达式语法?

我正在尝试使用紧凑文件夹表达式,但未成功。 例如,下面是一个正在运行的C++17代码 template struct Fold_And : std::integral_constant { }; template constexpr auto Fold_And_v = Fold_And:: ..
发布时间:2022-08-02 20:37:10 C/C++开发

函数参数求值和副作用

C++20标准规定函数调用,7.6.1.3/8: 参数的初始化(包括每个关联值计算和副作用)相对于任何其他参数的初始化是不确定的。 不确定排序(相对于非排序)可确保影响相同内存区域的副作用不是未定义的行为。Cp首选项gives the following examples: f(i = -2, i = -2); // undefined behavior until C++17 ..

复制省略和简单的可复制类型

从标准的6.7.7(临时对象)中可以看到: 当将类类型X的对象传递到函数或从函数返回时,如果X至少有一个合格的复制或移动构造函数([特殊]),每个这样的构造函数都是平凡的,并且X的析构函数要么是平凡的,要么是删除的,则允许实现创建一个临时对象来保存函数参数或结果对象。临时对象分别从函数实参或返回值构造,函数的参数或返回对象被初始化,就像使用符合条件的普通构造函数复制临时对象一样(即使该构造函 ..
发布时间:2022-05-17 11:12:26 C/C++开发

如何使使用基类构造函数的派生类的参数演绎工作?

当派生类使用基类构造函数时,演绎似乎总是fail。然而,当基类有许多构造函数时,重新定义所有构造函数是非常笨拙的。当基类使用新的构造函数快速演变时,这也是一件痛苦的事情。这个老问题是在两年多前提出的,所以我想知道:到2020年,当c++17和c++2a可用时,有什么办法可以解决这个问题吗? template class base_t { public: ..
发布时间:2022-05-16 22:47:44 C/C++开发

如何从CMake命令行跳过C++标准?

目前我有一个项目需要C++17,因此在CMakeLists.txt中我很早就有这样一行: set(CMAKE_CXX_STANDARD 17) 从命令行(cmake),偶尔我想测试一下该项目是否也可以用C++20编译。(以避免意外)。 如何选择从命令行使用C++20编译? 如果我这样做cmake -DCMAKE_CXX_STANDARD=20,则它稍后会被配置覆盖,而不是17 ..
发布时间:2022-05-16 21:58:48 C/C++开发

为什么C++17中的全局内联变量和静态内联成员需要保护?

从C++17开始,可以使用inline关键字初始化头中的全局变量和静态成员。虽然我理解为什么函数中的静态变量需要保护(因为初始化即使在多线程上下文中也应该只发生一次),但我不明白为什么这些新的内联变量也要保护(您可以在这里看到:https://godbolt.org/z/YF8PeQ)。我认为在任何情况下,所有全局变量和静态成员的初始化都是在程序执行开始时(甚至在main()之前)进行的,所以现在 ..
发布时间:2022-04-16 17:37:27 C/C++开发

将静态全局变量声明为内联有意义吗?

考虑全局变量(不是静态类成员!)在头文件中声明: inline static int i{}; 对于我测试的几个编译器来说,它是有效的构造,并且实验表明,将在不同的翻译单元中创建几个不同的对象,尽管它也被声明为内联(这意味着该变量的一个实例必须存在于程序中)。那么,在这种情况下,static关键字是否比inline更优先? 推荐答案 那么,在这种情况下,静态关键字是否比INL ..
发布时间:2022-04-10 16:31:28 C/C++开发

用于均匀缓冲区的Vulkan存储器对齐

我正在学习联机教程:vulkan-tutorial其中作者正在添加描述符池和描述符集的功能。 我使用的是Vulkanv1.2.135.0,我的着色器设置为#version 450 我几乎完成了本教程的这一部分,我能够渲染旋转正方形,并且在调试模式下编译和运行时没有收到来自Vulkan层的错误。 我在上面的链接提供的页面底部附近,他在UniformBufferOjbect结构中引入 ..
发布时间:2022-03-11 19:45:15 C/C++开发

获取C++函数参数类型

有没有一种标准的方法来获取函数参数的类型并将这些类型作为模板参数包进行传递?我知道这在C++中是可能的,因为it has been done before。 我希望在C++14或即将推出的C++1Z中,会有一种惯用的方式在这里实现arg_types...: template void some_function(); // Params ..
发布时间:2022-02-25 20:24:31 C/C++开发

创建连续的动态矩阵

数组具有作为连续内存块的良好属性。当使用new为数组分配内存时,它返回指向连续挡路内存的指针。但是,如果我使用new分配一个矩阵,如下所示: #include //std::cin int main() { int n, m; std::cin >> n >> m; int** mat = new int*[n]; for (int i ..
发布时间:2022-02-25 20:20:36 C/C++开发

使用c++17更新时出现G++编译器警告

我在windows10和mingw上运行g++编译器。 在cmd中检查编译器版本时,我得到以下信息: g++ --version- g++ (MinGW.org GCC Build-2) 9.2.0 与c++ --version相同 当我使用结构化绑定编译CPP程序时,收到警告: warning: structured bindings only available wit ..
发布时间:2022-02-25 20:18:48 C/C++开发