c++14相关内容

g++ 4.9 拒绝 C++14 中的有效聚合初始化

考虑这段代码: 结构 S{诠释 x;双 y = 1.1;};主函数(){S s = {0};} 根据 C++14 标准,§ 8.5.1/7 如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员都应从其大括号或相等初始化器中初始化,或者,如果没有大括号或相等- 初始化器,来自一个空的初始化器列表 (8.5.4). 代码应该完全有效. 但是,g++ 4.9.2 拒绝该 ..
发布时间:2022-01-23 20:42:31 C/C++开发

我可以使用相同的名称为周围范围内的类型声明成员类型别名吗?

出于元编程目的,我希望结构包含另一个类型的类型别名: struct Foo {};结构 WithNestedTypeAlias {使用 Foo = Foo;}; 然后我可以在模板等中执行 WithNestedTypeAlias::Foo 之类的操作. 据我了解,这种类型别名是有效的,因为它不会改变 Foo 类型的含义.Clang 愉快地编译了这个. 但是,GCC 抱怨: test ..
发布时间:2022-01-23 20:38:40 C/C++开发

用 g++ 编译 c++14 代码

我在 Ubuntu 14.04 LTS 上使用 g++ 4.8.4.尝试使用 '-std=c++14' 进行编译时,出现此错误: g++: 错误无法识别命令行选项'-std=c++14' 使用 '-std=c++11' 编译可以正常工作,所以我不确定发生了什么.g++ 真的不支持 c++14 吗?我是否使用了错误的命令行选项? 我使用了“sudo apt-get install g++" ..
发布时间:2022-01-23 20:23:40 C/C++开发

大括号初始化列表和无符号类型

gcc 8 和 clang 7 不接受以下代码,它们应该默认构造一个 unsigned int 类型的临时代码: unsigned int ui = unsigned int{}; clang 7报错如 :6:22: error: 'unsigned' 之前的预期主表达式 Visual C++ 2015 和 2017 接受这一点. 显然,这适用于诸如 int 之类的类型,或任何默认可 ..
发布时间:2022-01-19 00:07:55 C/C++开发

为什么可以在构造函数中修改 const 成员?

我很好奇为什么可以在构造函数中修改 const 成员. 初始化中是否有任何标准规则可以覆盖成员的“常量"? 结构栏{常量 int b = 5;//默认成员初始化酒吧(int c):b(c){}};酒吧 *b = 新酒吧(2);//问题:Bar::b 修改为 2//期望它是一个错误 有什么想法吗? 解决方案 这不是修改(或赋值),而是 初始化.例如 结构栏{常量 int b = ..
发布时间:2022-01-18 23:57:40 C/C++开发

__has_cpp_attribute 不是“类函数"宏?

我正在尝试将 [[deprecated]] 属性引入我的代码库.但是,并非我需要支持的所有编译器都支持这种语法(在标准化之前不同编译器使用的各种方法在 属性标准化提案 N2761).因此,我尝试在此属性中进行有条件地编译,首先使用 __has_cpp_attribute 类似宏的函数(如果可用),如下所示: #if defined(__has_cpp_attribute) &&__has_cpp ..
发布时间:2022-01-11 20:16:28 C/C++开发

#pragma 曾经是 C++11 标准的一部分吗?

传统上,避免在 C++ 中包含多个标头的标准和可移植方法是使用 #ifndef - #define - #endif预编译器指令方案,也称为 宏守卫方案(见下面的代码片段). #ifndef MY_HEADER_HPP#define MY_HEADER_HPP...#万一 然而,在大多数实现/编译器(见下图)中,有一个更“优雅"的替代方案,其用途与称为 #pragma once.#pragma ..
发布时间:2022-01-11 19:21:10 C/C++开发

链接 C++17、C++14 和 C++11 对象是否安全

假设我有三个编译对象,全部由相同的编译器/版本生成: A 是使用 C++11 标准编译的 B 使用 C++14 标准编译 C 是使用 C++17 标准编译的 为简单起见,我们假设所有标头都是用 C++11 编写的,仅使用语义在所有三个标准版本之间都没有改变的结构,因此任何相互依赖都可以通过标头包含正确表达并且编译器没有反对. 这些对象的哪些组合是,链接到单个二进制文件是否安全 ..
发布时间:2022-01-11 14:49:10 C/C++开发

我必须实现哪些功能才能使类可迭代?

我正在编写一个包含同一类的子对象集合的类,并希望使用标准提供的函数而不是以下函数来迭代和索引它们:first()、next()、previous()、last()、getchild(x) 等p> 在 c++14 中,我必须实现哪些函数才能使类在所有情况下都可迭代/可索引? 功能: begin() cbegin() rbegin() crbegin() end() cend( ..
发布时间:2022-01-10 14:47:39 C/C++开发