c++17 相关问题

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

如何升级到C++17?

我使用 Atom 作为我的 IDE,我当前的 __cplusplus = 201402 是 C++14,我的编译器是 g++ (GCC) 9.2.0。 如何升级到 C++17 或 C++20? 我搜索到的所有内容都涉及使用另一个...

回答 3 投票 0

如果结果不适合目标类型,结果 static_cast 是否为未定义行为

我们的代码库中有一个现有函数,如下所示: 模板 bool ConvertFromToIsValid(const OLD_TYPE fromValIC, NEW_TYPE & toValOR) noexce...

回答 1 投票 0

如何使用折叠表达式实现“多米诺骨牌”或“级联”更新功能?

我正在编写一个可变参数模板函数,它应该实现“多米诺骨牌”更新。也就是说:给定一个谓词 p,它应该迭代多个 lval(通过引用传递)和 ass...

回答 2 投票 0

如何用c++函数模板实现多调度

这就是我想要的: 结构体类型1{}; 模板 ,void>* = nullptr> my_fuction(const T& obj) { std::cout << "

回答 1 投票 0

使用 std::wstring_view 为映射定义 const std::wstring 键

我正在尝试使用 std::map 和 std::wstring 作为键来设置一个结构,并尝试使用一些语法 surgar 通过宏和 std::wstring_view 使键声明/定义变得容易(对于.. .

回答 1 投票 0

如果返回值依赖于函数参数,是否可以对其进行优化?

对于以下代码,我使用 C++17: 移动演员 dtor -------------------------------------------------- ------------------------------------------ dtor 这也是可能的输出吗?即移动 c'tor 是

回答 1 投票 0

C++ 标准如何规定空路径应规范化?

这个问题与此处提出的另一个问题相关[stackoverflow]1。 C++20 标准概述了“通用格式路径名的标准化”的过程(cpp 参考使用以下措辞:...

回答 1 投票 0

为什么在 C++ 的 if 语句中 x&1==0 和 !(x&1) 不会产生相同的结果?

我在 if 语句中有这两个条件来检查 x 是偶数还是奇数,但是 !(x&1) 似乎在 x 为偶数的情况下执行 if 的主体,而 x&1==0 则没有'执行它...

回答 1 投票 0

c++编译错误'预期';'使用直接大括号初始化时在声明结尾处

我对 C++ 非常陌生,正在学习我的第一个教程,当我尝试编译课程中的代码时,出现以下错误: 预期的 ';'在声明结束时 int x{ }; // 定义变量...

回答 5 投票 0

如何编写从 Foo<T> 到 Foo<T const> 的转换?

我正在为具有克隆函数的类编写一个继承自 std::unique_ptr 的类: 模板 cl_ptr 类:公共 std::unique_ptr { 民众: cl_ptr() 不...

回答 1 投票 0

使用 Visual C++ 提升内存访问失败

我正在考虑在使用 Visual C++ 编译的项目中使用 boost te lib(MSVC 19.29.30153.0 和 c++ 标准 20)。我以最简单的例子擦除它,本质上是: 结构可绘制...

回答 1 投票 0

自动从任何类型的两个元组==>成对的元组转换

我想要 C++17 中的某种反射。 为了测试它的功能和限制,我创建了一个仅复制 int 和 float 的自定义复制构造函数。 但是,我不知道如何自动合并元组...

回答 1 投票 0

为什么C++中没有预定义的零除异常?

ISO C++ 标准(我使用的是 ISO C++17)中有详细记录,整数除以 0 结果是未定义的。这也可以从排除零除异常中看出......

回答 1 投票 0

为什么使用 `std::view` 和 PSTL 实现速度较慢?

我最近刚刚了解 PSTL,正在尝试它。我不明白为什么以下代码的行为如此不同。以下是代码: //a.cpp #包括 #包括...

回答 1 投票 0

C++ 在模板参数和 lambda 的 `auto` 参数之间转发引用方面的差异

比较以下两种情况: 模板 void f1(Args&&... args) { do_smth(std::forward(args)...); } 自动 f2 = [](自动&&... args) { do_smth(s...

回答 1 投票 0

C++:使用折叠表达式实现“多米诺骨牌更新”

考虑以下代码: #包括 #包括 模板 无效 dominoe_update(P, Val&) {} 模板 考虑以下代码: #include <iostream> #include <functional> template<class Val, class P> void dominoe_update(P, Val&) {} template<class Val, class Lval, class... More, class P> void dominoe_update(P p, Val&& val, Lval& lval, More&... more) { if (p(val, lval)) { lval = val; // No need to forward since it'd potentialy chain more copies anyway dominoe_update(p, val, more...); } } int main(int, char**) { int i = 8, j = 9, k = 1; dominoe_update(std::less{}, 2, i, j, k); std::cout << i << ' ' << j << ' ' << k << '\n'; // Prints 2 2 1 return 0; } dominoe_update 使用 val 更新所有参数,直到 p 返回 false。 是否可以使用折叠表达式来实现上述函数以删除递归并删除基本情况函数?我认为这是不可能的,因为短路逻辑。 这是一种方法: template <class P, class Val, class... Lvals> void dominoe_update(P p, Val&& val, Lvals&&... lval) { ((/*if*/ p(val, lval) /*then*/ && (lval = val, true)) /*and next*/ && ...); } 演示 接受挑战。 template<typename P, typename Val, typename... Lval> void dominoe_update(P p, Val&& val, Lval&... lval) { bool go = true; ( (go && (go = p(val, lval)) ? (void(lval = val), 0) : 0), ...); } 演示

回答 2 投票 0

C++:使用折叠表达式进行编译时“多米诺骨牌更新”

考虑以下代码: #包括 #包括 模板 无效 dominoe_update(P, Val&) {} 模板 考虑以下代码: #include <iostream> #include <functional> template<class Val, class P> void dominoe_update(P, Val&) {} template<class Val, class Lval, class... More, class P> void dominoe_update(P p, Val&& val, Lval& lval, More&... more) { if (p(val, lval)) { lval = val; // No need to forward since it'd potentialy chain more copies anyway dominoe_update(p, val, more...); } } int main(int, char**) { int i = 8, j = 9, k = 1; dominoe_update(std::less{}, 2, i, j, k); std::cout << i << ' ' << j << ' ' << k << '\n'; // Prints 2 2 1 return 0; } dominoe_update 使用 val 更新所有参数,直到 p 返回 false。 主要问题:是否可以使用折叠表达式来实现上述函数以删除递归并删除基本情况函数?我认为这是不可能的,因为短路逻辑。 第二个问题:是否可以将谓词写为最后一个参数,而不是第一个?我知道在可变参数之后写参数是“复杂的”,但我认为在某些情况下推导规则允许这样做。 第三个问题:你认为这个函数有更好的名字吗?我正在考虑为常见情况提供一些实用函数,例如最小化和最大化,但是 dominoe_minimize 和 dominoe_maximize 作为通用名称对我来说听起来不太好。 接受挑战。 template<typename P, typename Val, typename... Lval> void dominoe_update(P p, Val&& val, Lval&... lval) { bool go = true; ( (go && (go = p(val, lval)) ? (void(lval = val), 0) : 0), ...); } 演示

回答 1 投票 0

模板参数能否无缝匹配类型和模板,也许作为变量的一部分?

我的代码使用类似于 Boost.PolyCollection 中的静态类型构造来存储一些状态。 我认为,我的问题至少可以通过下面的代码来说明。基本上我正在与

回答 1 投票 0

文件搜索从 C:\$Recycle.Bin\S-1-5-18 开始并导致 filesystem_error

我正在编写一个程序,从 C:\ 开始按名称搜索 Windows 目录中的文件。我使用 recursive_directory_iterator 和 std::filesystem 中的路径。 问题是,当用户输入时...

回答 1 投票 0

如何更新std::map的每个值?

我有一个地图和一个像这样的整数: 地图米= { { 'a', 10 }, { 'c', 2 }, { 'e', 4 }, { 'g', 5 }, { 'f', 17 } }; 整数a=20; 现在我想更新地图的每个值...

回答 1 投票 0

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