c++17 相关问题

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

如何转发类模板的构造函数参数

考虑一种默认的 Bar: 结构栏 { }; 以及 Bar 的一个特定情况 MyBar,它有一个需要 int 的构造函数: 结构体MyBar { MyBar(int n){} }; 然后我有一堂课,我们...

回答 2 投票 0

如何编写模板专业化的构造函数

考虑一种默认的 Bar: 结构栏 { }; 以及 Bar 的一个特定情况 MyBar,它有一个需要 int 的构造函数: 结构体MyBar { MyBar(int n){} }; 然后我有一堂课,我们...

回答 2 投票 0

C++标准库将来会包含网络、字符串算法……吗?

我不得不开始在工作中使用 C++,实际上,我开始喜欢它。多亏了斯科特·迈耶斯(Scott Meyers)的书,进入这个领域并不难。但我讨厌

回答 2 投票 0

不带(桌面)窗口的可滚动对话框

这个可滚动对话框的示例 https://www.codeproject.com/articles/32925/scrollable-dialog-in-pure-win32-api 工作正常,并显示对话框 我的问题是这个对话框= de...

回答 1 投票 0

在 C++ 中将 float 转换为 int

int uniquePaths(int m, int n) { int num = m+n-2; int den=1; 双 ans = 1; 而(书房<=m-1) { ans = ans*(num--)/(den++); } cout< int uniquePaths(int m, int n) { int num = m+n-2; int den=1; double ans = 1; while(den<=m-1) { ans = ans*(num--)/(den++); } cout<<ans; return (int)ans; } 作为上述代码段的输入,m=53, n=4 的预期答案是 26235,但代码返回 26234。但是,标准输出显示 26235。 您能帮我理解这种行为吗? 由于浮点舍入,您的代码将 ans 计算为 26,234.999999999985448084771633148193359375。当使用 cout<<ans 打印时,默认格式不会显示完整值,并将其四舍五入为“26235”。然而,当实际值转换为int时,结果是26,234。 将num设置为m+n-2后,您的代码正在计算num! / ((m-1)!(num-m+1)!),当然等于num! /((num-m+1)!(m-1)!)。因此,您可以使用 m-1 或 num-m+1 作为限制。所以你可以将while行更改为这两行: int limit = m-1 < num-m+1 ? m-1 : num-m+1; while(den<=limit) { 然后你的代码将运行到下限,这将避免 ans 除以尚未包含在其中的因素。所有结果都将是精确的整数结果,没有舍入误差,除非您尝试计算的结果超出了 double 格式能够表示所有整数的范围(在普遍存在的 IEEE- 中最多为 253) 754 二进制 64 格式用于 double)。 @埃里克 我也遇到同样的错误。 int uniquePaths(int m, int n) { double total=1.0; int paths=m+n-2; for(int i=1;i<m;i++) { total=(total*((paths-i+1)))/i; cout<<(paths-i+1)<<endl; cout<<total<<endl; } return (int) ans } 如果你不介意的话可以解释一下原因吗

回答 2 投票 0

C++ 中的字符数组打印

这是我正在使用的代码。 整数j=0; char v[] = {'a','e','i','o','u'}; for(j=0;v[j]!=' ';j++) { 计算<< v[j] << "\n"; } The "...

回答 1 投票 0

为什么我不能std::申请成员函数

我正在尝试开发一个包装器来帮助人们使用 pthread 来调用任何成员函数。 模板 结构签名; 模板 斯特...

回答 3 投票 0

GCC8 上的 std::string_view 问题

我有一些使用 std::string_view 的简单代码,它在 gcc10 中运行良好,但在 gcc8 中不起作用。 std::string_view 在 GCC 7 中被添加到 C++17 中,因此应该可以使用它。 #包括 我有一些使用 std::string_view 的简单代码,它在 gcc10 中运行良好,但在 gcc8 中不起作用。 std::string_view已添加到GCC 7中的C++17中,所以应该可以使用它。 #include <string_view> using sv = std::string_view; sv ParseScheme(const sv& url) { sv pattern = "://"; if (auto found = url.find(pattern); found != sv::npos) { return sv(url.begin(), url.begin() + found); } return sv(); } 编译给了我: $ g++ main.cpp --std=c++17 -Werror main.cpp: In function 'sv ParseScheme(const sv&)': main.cpp:9:44: error: invalid conversion from 'std::basic_string_view<char>::const_iterator' {aka 'const char*'} to 'std::basic_string_view<char>::size_type' {aka 'long unsigned int'} [-fpermissive] return sv(url.begin(), url.begin() + found); ~~~~~~~~~~~~^~~~~~~ In file included from main.cpp:1: /usr/include/c++/8/string_view:105:56: note: initializing argument 2 of 'constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view( const _CharT*, std::basic_string_view<_CharT, _Traits>::size_type ) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int ]' basic_string_view(const _CharT* __str, size_type __len) noexcept ~~~~~~~~~~^~~~~ 我实际上做错了什么,还是 gcc8 中的 string_view 刚刚损坏了? 我可以使用 -fpermissive 忽略该问题,但我们使用 -Werror 进行编译,因此 -fpermissive 警告无论如何都会使构建失败。 这里使用的string_view(Iterator,Iterator)构造函数是C++20中添加的。这就是为什么它在 gcc8 中不起作用。 另一种方法是使用 C++17 中可用的 string_view(const char*, size_type) 构造函数: #include <string_view> using sv = std::string_view; sv ParseScheme(const sv& url) { sv pattern = "://"; if (auto found = url.find(pattern); found != sv::npos) { return sv(url.data() + found, url.size() - found); } return sv(); }

回答 1 投票 0

如何实现成员方法指针的比较/较少运算符?

从我的阅读中,我了解到可以使用任一运算符来比较 C++ 中的某些指针类型< or std::less. This is useful if, for example, a pointer is used as a key for a std:...

回答 1 投票 0

问题:不完整类型“class NPCVisitor”(NPC_visitor.cpp,4 个字符串)的使用无效,不完整类型“class BattleField”(25 个字符串)的使用无效

我尝试在不同的地方连接头文件,似乎这还不够,没有帮助。我发现了这个错误信息: 导致unacce错误的常见原因有以下几种...

回答 1 投票 0

C++ - “HARD”类型

如果类型本身是别名,是否有强制类型的解决方案? 例子: 使用 my_type = uint32_t; void my_function(my_type 类型) { ... } 在上面的示例中,有效代码是 A 和 B:...

回答 1 投票 0

cout 中的 C++17 倍表达式

我正在学习新的c++17折叠表达式,我从c++17折叠表达式中看到了这段代码。我想知道为什么这段代码有效: 模板 无效打印机(参数&&.....

回答 2 投票 0

控制台中的键盘快捷键,输入-输出

我正在从 Stroustrup 的书《编程。使用 C++ 的原理和实践》学习编程 文件未在 Visual Studio 22 中执行时出现问题(检查

回答 1 投票 0

std::is_convertible 中的 std::decay 是多余的吗?

我写了这样的代码: 模板 A类{ 模板 ,std::decay_t>>> ...

回答 1 投票 0

在项目中包含SDL2

我有一个用 C++ 编写游戏的作业。标准之一是它需要在学校计算机上编译和运行。这些系统安装了 OpenGL 和 GLUT。 我想使用 SDL2 安装...

回答 1 投票 0

为元组/参数包中的每种类型生成开关案例

我试图弄清楚如何使用模板“magic”为元组中的每种类型自动生成 switch 语句。这是我的示例代码: #包括 枚举类

回答 1 投票 0

使用库 iostream 更新文件 .csv 时出错

我正在尝试更新用“;”分隔数据的文件中的信息和“/”,我的问题是,当我执行代码时,if(is.good) return false 给我带来一个 e...

回答 1 投票 0

最小化 Meyers 的单例开销

迈耶斯·辛格尔顿,s。 t: Foo& getSingleton() { 静态 Foo 单例; 返回单例; } 已知的是: 线程安全。 里面有一个分支。 而且它也恰好是最简单的...

回答 2 投票 0

保证新表达式分配的地址对齐

我正在使用 gcc 11.4 和 -m32 -std=c++20 编译代码 对齐(max_align_t) == 16 __STDCPP_DEFAULT_NEW_ALIGNMENT__ == 16 我应该从新声明中得到什么保证的一致性?

回答 1 投票 0

如何在缺少 <execution> 的系统上使用并行 std::for_each?

此 C++17 代码片段在较新版本的 G++ 中运行良好 std::for_each(std::execution::par_unseq,container.begin(),container.end(),[&](const auto& element) { // 用 eleme 做一些事情...

回答 2 投票 0

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