C ++ 17是2017年批准的C ++标准的名称。它基于以前的C ++ 14标准,改进了核心语言和标准库,并添加了一些新的语言功能。
我正在尝试创建一个函数对象,在给定一个指向成员的指针的情况下,它调用指向成员的 std::hash (或调用函数成员的结果),但是有问题 ab。 ..
也许我错过了一些东西,但我找不到任何提示:C++17中是否有一个constexpr三元运算符相当于constexpr-if? 模板 类总线地址{ 民众: 明确
我正在学习和玩一点指针和内存地址,问题是我尝试对数组内的实例进行一些操作并获取它们的内存地址,但我无法弄清楚...
inline 关键字是否应该用于 .cpp 文件中匿名命名空间中的变量?
如果我在 .cpp 文件的匿名命名空间中定义了 constexpr。是否应该将其声明为内联?或不? 两个声明之间有什么区别? // 在我的.cpp中 命名空间{
拥有类X,以下对象初始化: 新(ptr)X(X()); 即使从 C++17 开始,也需要一个可访问的析构函数。为什么会这样,当对象被默认构造函数初始化的时候...
我正在尝试转换/升级 32 位 COM 文件以编译为 64 位。 我已经修复了除一个之外的所有错误。 这是有问题的代码: HRESULT WINAPI QueryIMEDDevice(void *pV, REFIID r...
#包括 #包括 模板 std::string_view concatenateBuffer(std::string &buffer, Args &&... args){ static_assert((std::
我正在重构一些 C++,并遇到一些用于区分重载函数的虚拟结构。我正在考虑用模板专业化来替换它,但想要完全
我正在尝试为任意维度的对称块矩阵编写一个通用类。仅给出上三角部分: ABC 德 F 所以块的数量是 n*(n+1)/2 其中 n 是 ...
Codewars 问题:(数字总和/数字根) 给定 n,求 n 的数字之和。如果该值超过一位数,则继续以这种方式减少,直到产生一位数......
以下是参数包的使用示例: 模板 布尔 foo(A x) { 返回 (baz(x) || ...); } 我想做类似的事情,但是使用成对的类型。这是一个
带有单个模板参数的 `std::variant` 的目的是什么?
在此页面的示例中:https://en.cppreference.com/w/cpp/utility/variant 有一个带有单个模板参数的 std::variant: std::variant x("abc"); 自从
使用命名空间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
我在修改现有代码时偶然发现别名声明创建了 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 {…};
假设我有两个班级,A 和 B: A 类 { }; B 类:公共 A { 私人的: int B值{}; } 我有一个 A 类的指针,它是 C 类的成员字段: C级 { 私人的: ...
在我的应用程序中,我使用计算着色器快速地阐述数据。我为模型的每个实例分配一个计算着色器。例如,我有 30 个实例,我调度一个 Compute Shade...
使用 string_view 构造 istringstream 无法编译
我无法向 std::istringstream 的构造函数提供 std::string_view 。以下代码无法编译(使用 Clang v8 启用 C++17): std::string_view val = "你好"; std::istringstrea...
使用命名空间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
何时使用 std::invoke 而不是简单地调用可调用对象?
据我了解, std::invoke 允许我做类似的事情: std::invoke(f, arg1, arg2, ...); 是否存在比简单地执行以下操作更有利的情况: f(arg1, arg2, ...);
我正在使用 Visual Studio 运行一个简单的 SFML,它是超级马里奥的克隆。 我尝试复制这个问题,但失败了,所以只是用实际问题更新了这篇文章。我明白这很...