c++11相关内容
按照https://stackoverflow.com/a/11311786/890753中的@Evaned,我创建了一个gdb命令newstr来创建一个新的std::字符串并将其放入一个gdb便利变量: define newstr set ($arg0)=(std::string*)malloc(sizeof(std::string)) call ($arg0)->basic_string
..
我正在编写一些必须处理NTP时间的代码。我决定用std::chrono::duration来表示它们,我希望这会让我的时间数学更容易做。 NTP时间由无符号64位整数表示,从纪元开始的秒数在高32位,小数秒在低32位。划时代的日期是1900年1月1日,但这是一个与我在这里处理的问题不同的问题,我已经知道如何处理它。对于我正在使用的示例,假设纪元为1970年1月1日,以使计算更简单。 持续时
..
我在Github(https://github.com/Quuxplusone/coro/blob/master/examples/pythagorean_triples_generator.cpp)上查看了一个随机的C++示例,惊讶地发现它实际上可以编译(https://coro.godbolt.org/z/JXTX4Y)。 #include
..
发件人https://en.cppreference.com/w/cpp/memory/shared_ptr/allocate_shared: template shared_ptr allocate_shared( const Alloc& alloc, Args&&... args ); 存储空间通常
..
有时,我们对捕获对象状态的lambda的生存期一无所知(例如,从Object返回它,将其注册为回调而不能取消订阅等)。如何确保lambda不会在调用时访问已销毁的对象? #include #include #include class Foo { public: Foo(const std::string& i_name)
..
在C++0x中(哦!阅读C++11),我们有自动类型推理。有一件事让我很好奇,那就是我不能创建一个自动变量数组。例如: auto A[] = {1, 2, 3, 4}; // Error! 您知道这可能被禁止的原因吗? 推荐答案 auto将每个大括号括起的初始值设定项列表演绎为std::initializer_list。(参见第7.1.6.4.6节,包括示例)。 遗憾的
..
我有一些代码,我想在其中绝对确保移出的std::vector不会留下秘密数据(考虑一下加密密钥管理)。在我的类的Move构造函数中,我执行如下操作: X(X&& rhs): secret_vector{std::move(rhs.secret_vector)}{ rhs.secret_vector.resize(N); safe_zero(rhs.secret_vector)
..
我是C++11新手,在阅读C++11 FAQ时有以下问题。 假设我们有一个函数f()返回一个X类型的值,那么我们有以下方法来存储它的返回值: X a = f(); // copy assignment X&& b = f(); // move assignment 根据C++ FAQ,第二个可避免不必要的复制。 我的问题是:第二种方法总是接收函数调用返回值的首选方法吗?此
..
我有以下代码: #include #include using std::cout; struct SomeType { SomeType() {} SomeType(const SomeType &&other) { cout
..
阅读Stroustrup的C++编程语言第四版,在第7章中他说: move(x)表示static_cast(x),其中X是x的类型 和 由于move(X)不移动x(它只是生成一个右值引用 To x)如果调用了rval()会更好 我的问题是,如果move()只是将变量转换为rval,那么实现对变量的引用(通过更新指针)的实际机制是什么? 我认为move()就像
..
静态强制转换的说明为 如果new_type是右值引用类型,则STATIC_CAST将表达式的值转换为x值。此类型的STATIC_CAST用于在STD::Move中实现移动语义。(从C++11开始) 这是否确认以下内容是等价的? (A) X x1; X x2 = static_cast(x1); (B) X x1; X x2 = std::move(x1
..
我编写了这段小代码,以确保我的软件在必要时可以链接到libatics。通常,只有在覆盆子PI上才需要链接到脂组学。目前,我使用的是Raspberry PI 4,64位Raspbian Bullseye。 以下是cmake代码: set(ATOMIC32_TEST_CODE " #include #include int m
..
以下引用自C++ Standard - Memory Order: 如果线程A中的原子存储被标记为MEMORY_ORDER_RELEASE,而线程B中来自同一变量的原子加载被标记为MEMORY_ORDER_ACCENTE,则从线程A的角度来看,在原子存储之前发生的所有内存写入(非原子和松弛原子)在线程B中都成为可见的副作用。也就是说,一旦原子加载完成,线程B将确保看到线程A写入内存的所有内容
..
需要此调用来实现无锁的链表。 ATOMICMarkableReference是一个来自java.util.concurent.atom包的对象,它封装了对类型T的对象的引用和布尔标记。这些字段可以一起更新,也可以单独更新。 谢谢。 推荐答案 假设对象的对齐大于1,则可以将指针的最后一位用作布尔标记: template class MarkableRefer
..
代码库具有定义为__asm__ volatile("" ::: "memory")的COMPILER_BARRIER宏。宏的目的是防止编译器跨障碍对读写进行重新排序。请注意,这显然是编译器障碍,不是处理器级内存障碍。 实际上,这是相当可移植的,因为在汇编模板中没有实际的汇编指令,只有volatile和memory装配器。因此,只要编译器支持GCCS扩展ASM语法,它就应该工作得很好。不过,如果可
..
我有一个C++11程序,可以检查一个数字是否为质数。有一个程序等待准备好的未来对象。在它准备好之后,程序告诉未来对象的一个提供程序函数是否将该数字视为质数。 // future example #include // std::cout #include // std::async, std::future #include
..
通常,将C++11可变模板功能与函数一起使用时,要求基于可变的函数参数是函数参数列表中的最后一个。有一个例外;如果有C级可变参数,则它们是倒数第二个参数,而C级变量必须是最后一个。 template int super_printf( Something x, Args &&...a, ... ); 我有时会随机地想到C++,我想知道如何实现这
..
我想内联一个lambda表达式,因为出于性能原因,它非常简短。有可能吗? 推荐答案 inline关键字实际上不会导致函数内联。任何最新的编译器都会做出比您更好的内联决策。 如果是较短的lambda,该函数可能会内联。 如果您尝试将inline关键字与lambda一起使用,则答案是否定的,您不能使用该关键字。
..
我正在开发一款跨平台的手游(iOS和Android),使用的是coCos2d-x。 我的大部分代码都是用C++编写的,而特定于操作系统的代码则使用了桥接在Objective-C/Java/Swift中。 我想知道是否有人在他们的应用中使用过C++库来托管UDP服务器? 编辑:到目前为止,我已经找到了很多特定于平台的解决方案(使用Java for Android,以及Cocoaasync
..
您好,我正在尝试创建一个wxApp,它将没有默认提供的标题栏(包括最小化、最大化和关闭)图标。我拥有的代码如下: main.h class MyApp : public wxApp { public: virtual bool OnInit(); }; main.cpp bool MyApp::OnInit() { MyFrame *prop = new M
..