将此标记用于必须编译为C ++ 11的代码(不使用C ++ 14或更高版本中引入的任何功能)。
如何在 C++11 中初始化包含 const 数据成员的联合
我在初始化包含 C++11 中 const 成员的联合时遇到问题。 在 C++20 中,通过使用指定的初始值设定项可以避免该问题。例子 : 联盟 my_union { 常量无效* ptr; ...
`std::sprintf` 或 `std::snprintf` 带有参数包,无需额外调用和 tmp 缓冲区
有没有办法摆脱 tmp 和 Print 中对 std::snprintf 的第二次调用?我可以只用一个 std::snprintf 调用来做同样的事情吗? //arm-none-eabi-g++ -std=c++14 -O3 -Wall -fno-rtti -fno-
在 Windows 上默认启用 GCC 编译器 C++11 标志
我使用的是Windows 8.1,并在我的机器上安装了GCC编译器。每次我必须编译 c++ 文件(使用 c++ 11 功能)时,我都需要在命令提示符下键入 g++ file.cpp -std=c++11。是
所以这是这些编译器错误之一,我只是无法找出问题的根源。 这是类 LocalQualityMeasure,标题 #包括 #include“../聚类/
例如如何执行 Wrapper::call_to_func 该参数列表 call_to_func 应该是 func A级 { 无效函数(int,char,double); }; 模板 类包装器 { 公众:...
shared_ptr 如何使用 -> 和 .具有相同变量名的运算符?
我在下面的示例中遇到了困惑,我声明了一个共享 ptr 'u' 我正在使用 u->data 以及 u.use_count() 既然 'u' 持有一个指针,那么我们如何使用点运算符来调用 use_coun...
其实这是两个相关的问题。 我知道 C++11 中有一种用于基于范围的 for 循环的新语法,其形式为: //v是一些容器 对于(自动&i:v){ // 用 i 做一些事情 } 第一
我正在编写一个程序,其中包含一个列表,其中T是int或double。我想创建一个函数,使用标头 中的组件,生成 T 类型的数字。我可以...
这是代码,非常简单。 类 Foo { 民众: 无效打印(){ std::cout<<"Foo::print\n"; } }; Game::Game() { { Foo foo; pla...
如何在C++11中实现make_unique函数? [重复]
我的编译器不支持make_unique。怎么写一篇呢? template< class T, class... Args > unique_ptr make_unique( Args&&... args );
C++11 + SDL2 + Windows:多线程程序在任何输入事件后挂起
我正在使用 C++11、MinGW 和 Windows API 开发屏幕捕获程序。 我正在尝试使用 SDL2 实时观察我的屏幕捕获程序如何工作。 窗户打开得很好,
vscode 编译错误。类型说明符是 C++11 扩展[重复]
如何在 vscode 上使用 C++11 兼容模式进行编译? 测试.cpp #包括 使用命名空间 std; 无效打印() { int v[] = {0,1,2,3,4,5,6,7,8,9}; 对于(自动x:v){ ...
在 C++11 中,std::sqrt 定义为 constexpr,即它可以合法地从其他 constexpr 函数或在编译时上下文(如数组大小或模板参数)中使用吗? g++ 似乎允许它(usi...
我正在尝试创建一个笔记本程序 .cpp 文件: #包括 #include“菜单.h” 课堂笔记本 { std::vector m_notes; 民众: 无效addNote() { ...
给出以下 C++ 代码: 结构体顶点类型{ 浮动 x、y、z; //顶点类型() {} //vertex_type(float x, float y, float z) : x(x), y(y), z(z) {} }; 类型定义结构{ 顶点类型
我正在尝试创建一个笔记本程序 .cpp 文件: #包括 #include“菜单.h” 课堂笔记本 { std::vector m_notes; 民众: 无效addNote() { ...
持久化 std::chrono time_point 实例然后将它们读回相同类型的另一个实例的正确方法是什么? typedef std::chrono::time_point 持久化 std::chrono time_point 实例然后将它们读回相同类型的另一个实例的正确方法是什么? typedef std::chrono::time_point<std::chrono::high_resolution_clock> time_point_t; time_point_t tp = std::chrono::high_resolution_clock::now(); serializer.write(tp); . . . time_point_t another_tp; serializer.read(another_tp); 对写入/读取的调用,假设 time_point_t 类型的实例可以以某种方式转换为字节表示形式,然后可以将其写入磁盘或套接字等或从磁盘或套接字等读取。 Alf 建议的一个可能的解决方案如下: std::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now(); //Generate POD to write to disk unsigned long long ns0 = t0.time_since_epoch().count(); //Read POD from disk and attempt to instantiate time_point std::chrono::high_resolution_clock::duration d(ns0) std::chrono::high_resolution_clock::time_point t1(d); unsigned long long ns1 = t1.time_since_epoch().count(); if ((t0 != t1) || (ns0 != ns1)) { std::cout << "Error time points don't match!\n"; } 注意: 上面的代码有一个错误,因为最终实例化的时间点与原始时间点不匹配。 在旧式 time_t 的情况下,通常只是根据其 sizeof 将整个实体写入磁盘,然后以相同的方式读回 - 简而言之,新的 std::chrono 类型相当于什么? 从磁盘或套接字读取意味着您可能正在未执行写入操作的应用程序实例中进行读取。 在这种情况下,仅序列化持续时间是不够的。 A time_point 是自未指定纪元以来的 duration 时间量。 纪元可以是任何东西。 在我的计算机上,std::chrono::high_resolution_clock的纪元是计算机启动时。 IE。该时钟报告自启动以来的纳秒数。 如果一个应用程序写入 time_since_epoch().count(),计算机重新启动,然后另一个(甚至相同)应用程序将其读回,则读入的值没有任何意义,除非您碰巧以某种方式知道两次启动之间的时间量。 为了可靠地序列化 time_point,必须安排作者和读者就某个纪元达成一致,然后确保写入和读取的 time_point 是相对于该纪元的。 例如,人们可能会安排使用 POSIX 纪元:New Years 1970 UTC。 事实证明,我所知道的每个 std::chrono::system_clock 实现都使用 Unix 时间,这是从 1970 年新年开始测量的 UTC 的近似值。但是我知道 std::chrono::high_resolution_clock 没有共同的纪元。 只有当您能够以某种方式确保读取器和写入器时钟在共同纪元上达成一致时,您才能将 time_point 序列化为持续时间。 C++20 更新 std::chrono::system_clock的纪元现在指定为Unix时间(1970-01-01 00:00:00 UTC,忽略闰秒)。 time_point构造函数接受一个duration,您可以从成员duration获得一个time_since_epoch。因此,问题减少为序列化 duration 值。并且 duration 有一个接受多个刻度的构造函数,以及一个生成刻度数的成员函数 count。 这一切只是通过谷歌搜索std::chrono::time_point并查看谷歌给我找到的cppreference文档。 阅读文档通常是个好主意。 附录:一个例子。 #include <chrono> #include <iostream> #include <typeinfo> using namespace std; auto main() -> int { using Clock = chrono::high_resolution_clock; using Time_point = Clock::time_point; using Duration = Clock::duration; Time_point const t0 = Clock::now(); //Generate POD to write to disk Duration::rep const ns0 = t0.time_since_epoch().count(); //Read POD from disk and attempt to instantiate time_point Duration const d(ns0); Time_point const t1(d); cout << "Basic number type is " << typeid( ns0 ).name() << "." << endl; if( t0 != t1 ) { cout << "Error time points don't match!" << endl; } else { cout << "Reconstituted time is OK." << endl; } } 在 Visual C++ 12.0 中,报告的基本类型是 __int64,即 long long,而在 Windows 中的 g++ 4.8.2 中,报告的类型是 x,这可能意味着相同。 两个编译器的重构时间与原始时间相同。 附录:正如 Dina 在评论中指出的那样,从 C++14 开始,C++ 标准没有指定纪元,因此为了使其跨机器或使用不同的时钟工作,有必要添加额外的步骤,标准化序列化数据的纪元,例如最自然的是Posix 时间,即自 1970 年 1 月 1 日星期四 00:00:00 协调世界时 (UTC) 以来的时间。
如何在 C++11 (STL) 中创建一个压缩两个元组的函数?
我最近遇到了这个难题,终于能够找到一个黑客答案(使用索引数组),并想分享它(答案如下)。我确信有使用模板递归的答案......
我最近开始将许多现有的类迁移到使用智能指针,我有一些关于如何移植一些我认为可以从使用智能指针中受益的代码的问题...
如何在eclipse makefile项目中的编译器选项中设置-std=c++0x?
我需要在 eclipse 中的 makefile 项目中设置编译器选项。 我遵循了这个指示: http://www.eclipse.org/forums/index.php/mv/msg/282618/787571/ 最后一部分指出: 显然