c++17 相关问题

C ++ 17是2017年批准的C ++标准的名称。它基于以前的C ++ 14标准,改进了核心语言和标准库,并添加了一些新的语言功能。

inline 关键字是否应该用于 .cpp 文件中匿名命名空间中的变量?

如果我在 .cpp 文件的匿名命名空间中定义了 constexpr。是否应该将其声明为内联?或不? 两个声明之间有什么区别? // 在我的.cpp中 命名空间{

回答 1 投票 0

为什么析构函数即使在没有被调用时也需要可访问?

拥有类X,以下对象初始化: 新(ptr)X(X()); 即使从 C++17 开始,也需要一个可访问的析构函数。为什么会这样,当对象被默认构造函数初始化的时候...

回答 1 投票 0

将 32 位 COM 接口转换为 64 位

我正在尝试转换/升级 32 位 COM 文件以编译为 64 位。 我已经修复了除一个之外的所有错误。 这是有问题的代码: HRESULT WINAPI QueryIMEDDevice(void *pV, REFIID r...

回答 1 投票 0

以特定方式展开和折叠参数包

#包括 #包括 模板 std::string_view concatenateBuffer(std::string &buffer, Args &&... args){ static_assert((std::

回答 1 投票 0

使用虚拟结构重载函数与模板专业化

我正在重构一些 C++,并遇到一些用于区分重载函数的虚拟结构。我正在考虑用模板专业化来替换它,但想要完全

回答 1 投票 0

C++17:在可变参数模板之前显式第一个模板参数

我正在尝试为任意维度的对称块矩阵编写一个通用类。仅给出上三角部分: ABC 德 F 所以块的数量是 n*(n+1)/2 其中 n 是 ...

回答 1 投票 0

优化N的数字和

Codewars 问题:(数字总和/数字根) 给定 n,求 n 的数字之和。如果该值超过一位数,则继续以这种方式减少,直到产生一位数......

回答 2 投票 0

如何对类型对进行参数打包?

以下是参数包的使用示例: 模板 布尔 foo(A x) { 返回 (baz(x) || ...); } 我想做类似的事情,但是使用成对的类型。这是一个

回答 1 投票 0

带有单个模板参数的 `std::variant` 的目的是什么?

在此页面的示例中:https://en.cppreference.com/w/cpp/utility/variant 有一个带有单个模板参数的 std::variant: std::variant x("abc"); 自从

回答 3 投票 0

浮点输出出现意外结果

使用命名空间std; #定义模1e9+7 int main(){ 计算< using namespace std; #define mod 1e9+7 int main(){ cout<<mod; cout<<endl<<fixed<<mod; } 输出: 1e+009 1000000007.000000 我认为在这种情况下,mod 是一个浮点数,因此第一个给出 1e+009 作为输出,这可能是由于浮点精度所致。但是使用fixed后,为什么输出不是1000000000.000000。 (通过#include 包含所有必需的头文件) 1e9 + 7 这个数字可以在 double 中精确表示,这里没有精度损失。 但是,当您使用std::cout << mod打印它时,它会使用默认精度打印,即6位十进制数字。因此,不打印 7。 您可以使用 std::cout 操纵器调整 std::setprecision 的精度: #include <iostream> #include <iomanip> int main() { std::cout << std::setprecision(10) << mod << '\n'; } 将打印 1000000007

回答 1 投票 0

是可选的<void> 输入名称有效吗?

我在修改现有代码时偶然发现别名声明创建了 std::Optional。它来自这样的模板代码: 使用 ret_t = std::invoke_result_t 我在修改现有代码时偶然发现别名声明创建了std::optional<void>。它来自这样的模板代码: using ret_t = std::invoke_result_t<Fn, Args...>; using opt_ret_t = std::optional<ret_t>; 稍后代码会区分返回类型为(非)void 的情况,因此永远不会创建实际的可选对象。为了确保我没有遗漏某些内容,我在该代码分支中添加了一个断言,并且所有内容都可以编译: static_assert(std::is_same_v<opt_ret_t, std::optional<void>>); cppreference 说: 没有可选的引用、函数、数组或 cv void;如果程序用这样的类型实例化一个可选项,那么它就是格式错误的。 因此,不管编译器不抱怨这段代码是否格式错误? 在某些特定情况下,(类)模板会被隐式实例化:请参阅 [temp.inst],尽管在某些情况下,它可能会因实现而异。 在任何情况下,仅仅提及 template-id 都不会导致实例化;通常,当类型需要完整时,就会发生这种情况。 在 C++20 中,可以声明带有 constraints 的模板,即使模板专门化仅被命名,这些约束也会生效: template<class T> requires !std::is_void_v<T> struct foo {…};

回答 1 投票 0

从父类型的指针访问派生类的成员字段

假设我有两个班级,A 和 B: A 类 { }; B 类:公共 A { 私人的: int B值{}; } 我有一个 A 类的指针,它是 C 类的成员字段: C级 { 私人的: ...

回答 1 投票 0

Vulkan 计算着色器同步

在我的应用程序中,我使用计算着色器快速地阐述数据。我为模型的每个实例分配一个计算着色器。例如,我有 30 个实例,我调度一个 Compute Shade...

回答 1 投票 0

使用 string_view 构造 istringstream 无法编译

我无法向 std::istringstream 的构造函数提供 std::string_view 。以下代码无法编译(使用 Clang v8 启用 C++17): std::string_view val = "你好"; std::istringstrea...

回答 4 投票 0

意外的结果(C++)

使用命名空间std; #定义模1e9+7 int main(){ 计算< using namespace std; #define mod 1e9+7 int main(){ cout<<mod; cout<<endl<<fixed<<mod; } 输出: 1e+009 1000000007.000000 我知道在这种情况下,mod 是一个浮点数,因此由于浮点精度,第一个给出 1e+009 作为输出。但是使用fixed后,为什么输出不是1000000000.000000。 (通过#include 包含所有必需的头文件) 1e9 + 7 这个数字可以在 double 中精确表示,这里没有精度损失。 但是,当您使用 std::cout << mod 打印它时,它会使用默认精度打印,即 6 位十进制数字。因此,不打印 7。 您可以使用 std::cout 操纵器调整 std::setprecision 的精度: #include <iostream> #include <iomanip> int main() { std::cout << std::setprecision(10) << mod << '\n'; } 将打印 1000000007

回答 1 投票 0

何时使用 std::invoke 而不是简单地调用可调用对象?

据我了解, std::invoke 允许我做类似的事情: std::invoke(f, arg1, arg2, ...); 是否存在比简单地执行以下操作更有利的情况: f(arg1, arg2, ...);

回答 4 投票 0

SFML 音频 Visual Studio C++

我正在使用 Visual Studio 运行一个简单的 SFML,它是超级马里奥的克隆。 我尝试复制这个问题,但失败了,所以只是用实际问题更新了这篇文章。我明白这很...

回答 1 投票 0

多态性:屏蔽方法签名

由于多态性,我有这个编译错误(我猜) 错误:没有匹配的函数可用于调用“driven::print()” : #包括 类基数{ 民众: 无效打印() {...

回答 1 投票 0

在元组中打包、解包和存储参数包

我有一个函数指针和参数,我想保存这些并可能修改它们并用它们调用函数。 我已经看到了部分答案,但我不确定如何完整

回答 1 投票 0

在 C++ 17 中将参数包打包、解包并存储在元组中

我有一个函数指针和参数,我想保存这些并可能修改它们并用它们调用函数。 我已经看到了部分答案,但我不确定如何完整

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.