C ++ 17是2017年批准的C ++标准的名称。它基于以前的C ++ 14标准,改进了核心语言和标准库,并添加了一些新的语言功能。
考虑以下代码: 模板 KFBase 类 { 民众: 模板 结构体状态{ 名义名义状态; }; }; 模板 考虑以下代码: template <class Derived> class KFBase { public: template <typename Nom> struct State { Nom nominal_state; }; }; template <typename A> class PFilter : public KFBase<PFilter<A>> { public: using Base = KFBase<PFilter<A>>; // comment this out and it works using State = typename Base::State<int>; }; int main(int, char**){ PFilter<int>{}; } 正如评论中所暗示的,如果我注释掉 State 别名,一切都可以在 MSVC 上正常编译。但是,如果我包含它,则在使用 C++17 或 C++20 编译时会出现编译错误(https://godbolt.org/z/aM78ToMsc),但回滚到 C++14 时它可以工作再次在 MSVC 上 (https://godbolt.org/z/Eej9bjrf7) 在 GCC 上,它可以与 C++20 一起编译,所以我想知道我是否遵循 C++ 标准,或者这是 C++17 MSVC 实现中引入的错误。 我的直觉是这与 CTAD 有关,但我不确定。 有谁能解释一下吗? 附注 如果有人对这个问题有更好的标题,请告诉我。 您可能需要 template 来表明 < 不是比较 using State = typename Base::template State<int>; MSVC 在 C++14 模式下相当宽松(因为当时确实如此)。更高版本默认打开 /permissive- 标志。 也许 gcc 默认也有更宽松的模式,我不知道。
你能从桌面快捷方式打开用 VSCode 制作的 C++ 游戏吗?
我使用 VSCode 用 C++ 和 Raylib 制作了一个俄罗斯方块游戏,我想知道是否有一种方法可以单击计算机上的快捷方式并打开该程序。我使用的是 Windows 11。 我正在关注
我正在乞求我的 C++ 之旅,我正在尝试找到一种快速的方法来编译和运行我的程序,而无需将手从键盘移到鼠标。我知道这可能看起来很懒,但有些......
我正在用 Qt 编写一个用于前端 MySQL 的 C++ 应用程序(稍后,将会有一个客户端-服务器拆分,其中数据库只能由 Linux 上的服务器守护程序和其他任何客户端访问;只是从 ba 开始。 ..
我花了一些时间来诊断错误,其中我丢失了使用 std::string_literals 创建的两个字符串之间的逗号。最小可重现代码如下: #包括 模板...
为什么我的交互式问题在字符串查询时失败,但在直接整数输入时有效?
问题链接 = 链接 我正在解决一个交互式问题,并且遇到一个问题,当我使用直接整数输入/输出进行查询时,我的解决方案可以完美运行。然而,当我尝试...
当我运行此代码时: #包括 #包括 A类{ 民众: 虚拟 std::unique_ptr 克隆() = 0; }; B 类:公共 A { 私人的: 整数b0; 民众: B(缺点...
尝试定义一个函数类型别名,该别名取决于我在其中定义的模板类的参数 T。具体来说,如果 T 不是 void,则函数类型的形式为 void foo(T),并且 void.. .
正如标准所述,C++17 保证复制省略适用于作为参数的返回对象或临时对象。 但为什么不两者都呢?如代码所示: #包括 结构体S{ S() { std::p...
我正在使用 NLOpt 库实现非线性优化问题,但在使用 C++ 接口定义向量值不等式约束时遇到一些问题。 NLOpt d...
AsyncReadStream&流, DynamicBuffer&缓冲区, basic_parser< isRequest >&解析器, ReadHandler&& 处理程序 = net::default_completion_token_t< executor_type<
我对此进行了搜索,但没有找到太多信息。可能我需要进行更多搜索,但我仍然会继续在这里提出问题。 我有一个下面的代码模式,其中有 1 类 ded...
由于 c++17 中没有基于索引的并行算法,我想知道是否 range::view::iota 可以与 std::for_each 结合使用来模拟它。那是: 使用命名空间 std; 缺点...
#define DEFINE_ENUM_CLASS(名称, ...) \ 枚举类名称 { __VA_ARGS__ }; \ constexpr const char* Name##Strings[] = { #__VA_ARGS__ }; int main() { DEFINE_ENUM_CLASS(颜色,红色,绿色,蓝色);
#define DEFINE_ENUM_CLASS(名称, ...) \ 枚举类名称 { __VA_ARGS__ }; \ constexpr const char* Name##Strings[] = { #__VA_ARGS__ }; int main() { DEFINE_ENUM_CLASS(颜色,红色,绿色,蓝色);
#define DEFINE_ENUM_CLASS(名称, ...) \ 枚举类名称 { __VA_ARGS__ }; \ constexpr const char* Name##Strings[] = { #__VA_ARGS__ }; int main() { DEFINE_ENUM_CLASS(颜色,红色,绿色,蓝色);
#define DEFINE_ENUM_CLASS(名称, ...) \ 枚举类名称 { __VA_ARGS__ }; \ constexpr const char* Name##Strings[] = { #__VA_ARGS__ }; int main() { DEFINE_ENUM_CLASS(颜色,红色,绿色,蓝色);
c++17 提供了 if constexpr,其中: condition 的值必须是根据上下文转换的 bool 类型常量表达式。如果值为 true,则丢弃语句 false(如果存在...
制作一个链接列表库,我想传递多个值以使附加项目更容易,所以我创建了一些可变参数函数,在使用 int 值进行测试时,wor...
uWebSockets send() 上的 C++ 错误:在未检查 cancork 的情况下不得获取 cork 缓冲区
我正在为嵌入式系统开发一个websoscket服务器。要求非常简单:将更新发送到 web 应用程序订阅的信号 ID 列表。一切正常,直到崩溃......