c++17 相关问题

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

为什么对 std::distance 的第二次调用会给出不同的结果?

我最近在 std::distance 上遇到了一个奇怪的行为。它没有给出预期的结果,或者我理解不正确。该标准没有对此提供太多细节 https://en.cppreference.com/w/cpp/

回答 1 投票 0

错误:‘?:’的操作数有不同的类型‘int’和‘Person’

我试图拥有一个函数,我可以在其中检查传入的类型是类对象还是只是变量数据类型。根据这个事实的情况,我会用它做一些事情。怎么...

回答 1 投票 0

如何对指向派生类实例的指针的 std::vector 的元素进行排序

我正在编写一个使用派生类实例指针数组的 2D RPG 游戏。为了清楚起见,我提供了一个 C++ 代码示例。 我想根据

回答 1 投票 0

为什么std::conditional_variable只能与std::unique_lock一起使用?

std::condition_variable 仅适用于 std::unique_lock,它可以在某些平台上实现最大效率。 std::condition_variable_any 提供了一个有效的条件变量

回答 1 投票 0

为什么C++条件变量只能与std::unique_lock一起使用?

std::condition_variable 仅适用于 std::unique_lock,它可以在某些平台上实现最大效率。 std::condition_variable_any 提供了一个有效的条件变量

回答 1 投票 0

lazy 仅在“if constexpr”内需要时才评估昂贵的局部变量,而无需运行时 if-else

我必须在函数中的 5-10 个位置使用变量 v。 从分析来看,v 的初始化(相对)非常昂贵。 如何仅在需要时才初始化 v? 不幸的是它是一个引擎...

回答 1 投票 0

基于字符类型的 string_view 模板

我正在尝试创建一个将字符串或字符数组与字符数组或其他字符串进行比较的函数,并且我希望它能够处理 utf8 和 ascii 格式。 这是 cod 的测试版...

回答 2 投票 0

如何将`basic_string`隐式转换为推导的`basic_string_view`模板?

我正在编写一个通用算法,可以处理任何字符类型的字符串或字符串段——因此我决定使用带有推导模板参数的 std::basic_string_view ...

回答 2 投票 0

为什么要“移动语义”而不是简单地memcpy?

给出以下代码: 类型名 std::aligned_storage::类型 storage_t; //这将 src 的后面移动到 dst 的后面: 无效push_popped(std::list ...

回答 2 投票 0

C++17 带有元组的查找表。如果找不到给定值,我需要一个编译时错误

我有一个包含两个键入值的表。在生产代码中,我在元组中搜索给定值。我没有得到的是,如果在元组中找不到该值,我想得到一个编译时错误。埃克...

回答 1 投票 0

在 Docker 中安装 Horovod 时出错 - PIP - C++17

我尝试为我们的训练机器创建一个 docker 镜像。 python 的 horovod 安装失败。看来问题是没有使用 c++17 编译器。 到目前为止我的 dockerfile: 来自 nvidia/cu...

回答 1 投票 0

推导 std::variant 模板参数的模板参数

我有一个模板类,它采用 std::variant 作为模板参数: 模板 X级 { }; X> x; 我想添加一个约束,使 T 成为 der...

回答 1 投票 0

C++ 中运算符优先级的混乱

我正在学习 C++,目前正在学习运算符优先级。我正在使用以下示例。 将每一段想象为在不同时间运行的不同代码段,而不是多个代码

回答 1 投票 0

使用基类的ctor的参数调用派生类的ctor

浏览我的代码,我发现了一个部分 - 我认为 - 应该是编译时错误,但实际上编译和运行良好。一个简化版本是: 类基类 { 民众: 基数(int i) {} }; ...

回答 1 投票 0

如何允许在没有单独的资源文件的情况下编译长原始字符串文字

我正在开发一个 C++ 代码库,该代码库提供了一些库的源文件,我无法违反某些准则或更改库逻辑和范例,例如我'...

回答 1 投票 0

如何使 `if constexpr` 变得对 SFINAE 友好?

我有一个使用“经典”SFINAE 的代码。 template auto power(M const& elem) -> decltype(std::norm(elem)) { return std::norm(elem); } 模板 我有一个使用“经典”SFINAE 的代码。 template<class M> auto power(M const& elem) -> decltype(std::norm(elem)) { return std::norm(elem); } template<class M, class = std::enable_if_t<(M::rank::value >= 1)>> auto power(M const& array) { return accumulate(begin(array), end(array), 0.0, [](auto const& alpha, auto const& omega) { return alpha + power(omega); }); } 这是一个递归(跨维度或等级)“幂”函数,通过计算较低维度子元素的幂,最终给出元素的平方和。 现代 C++ 鼓励使用 if constexpr 以避免使用 SFINAE,如下所示。 template<class M> auto power(M const& array) { if constexpr(M::rank::value >= 1) { return accumulate(begin(array), end(array), 0.0, [](auto const& alpha, auto const& omega) { return alpha + power(omega); }); } else { return std::norm(array); } } 问题在于,if constexpr中的表达式似乎首先必须是有效的表达式。 元素没有名为 rank 的成员类型,因此会出现编译错误。 如果表达式无效,是否有技巧可以使 if constexpr 谓词? C++20 及更新版本: if constexpr (requires{requires std::bool_constant</*condition*/>::value;}) 还有一个不太详细的选项: if constexpr (requires{requires /*condition*/;}) 但是后者更糟糕,因为如果编译时不知道条件,它会导致硬错误,而前者只是返回 false。 前者在标准库中使用(另请参阅在嵌套需求中,为什么使用requires bool_constant<X>::value;而不是requires X;?)。 C++17: 使用检测惯用语: #include <type_traits> namespace detail { template <typename ...P> struct void_type {using type = void;}; template <typename DummyVoid, template <typename...> typename A, typename ...B> struct is_detected : std::false_type {}; template <template <typename...> typename A, typename ...B> struct is_detected<typename void_type<A<B...>>::type, A, B...> : std::true_type {}; } template <template <typename...> typename A, typename ...B> inline constexpr bool is_detected = detail::is_detected<void, A, B...>::value; 然后: template <typename M> using CheckRank = std::enable_if_t<M::rank::value >= 1>; if constexpr (is_detected<CheckRank, M>)

回答 1 投票 0

是否通过值显式捕获此值强制复制此值,即使它未在 lambda 主体中使用?

如果我在类成员函数中有一个 lambda,并且它实际上不需要捕获 this (例如,它不使用任何成员变量),则显式捕获 this (按值)会强制复制 thi. ..

回答 1 投票 0

`std::可选`工厂函数,具有保证复制省略和`私有`构造函数,没有密钥习惯用法

考虑以下模式: 类部件 { 私人的: 显式小部件(依赖&&); 民众: 静态 std::可选 make(std::文件系统::路径 p) { 标准::

回答 1 投票 0

删除了模板类构造函数,但有一个专门化与 clang 和 gcc 的行为不同

我正在尝试理解这种行为。 我创建了一个模板类,其中删除了构造函数,然后将其专门用于 int 类型。我的目标是仅为 int 创建实例(

回答 1 投票 0

将可选值初始化为 null 或值的体面习惯用法?

动机 随着 C++ 获得了可选值(在 C++17 中),现在通常需要编写以下内容: 如果条件成立,则用某个表达式初始化我的变量;如果条件

回答 1 投票 0

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