草庐IT

-std=gnu99

全部标签

c++ 11 std::atomic_flag,我使用正确吗?

我有一个简单的bool值,需要以线程安全的方式进行测试和设置。如果一个线程已经在工作,我希望第二个线程退出。如果我明白std::atomic_flag正确,这应该可以正常工作。但是,我不确定我是否正确理解了std::atomic_flag:)我似乎无法在网上找到很多简单的示例,除了这个自旋锁示例://myclass.cpp#usingnamespace//anonymousnamespace{std::atomic_flag_my_flag=ATOMIC_FLAG_INIT;}//nsmyclass::do_something(){if(!::_my_flag.test_and_set

c++ - 我如何找出 std::map 方法可以抛出哪些异常?

我想在使用std::map(C++)方法以及使用boost::unordered_map方法时处理异常情况。但是,查看方法文档(例如:insert)并没有提供我可以捕获的异常列表。 最佳答案 查看好的文档:如果您不确定那么-最终-标准,但是例如http://en.cppreference.com/w/cpp/container/map/insert可能更方便,并且有一个异常(exception)标题涵盖大多数变体(希望有一天会完成)。您不可能找到比boost站点在线文档更好的boost文档。如果好的引用资料没有记录异常,通常是因为该

c++ - 制作一个以坐标为键的 std::map

创建一个以坐标为键的std::map似乎是不可能的。当两个坐标的(x+y+z)相同时,map将覆盖前一个。示例:map[Coordinate(1,0,0)]=object1;map[Coordinate(0,1,0)]=object2;map[Coordinate(0,0,1)]=object3;这将导致有一个包含1个元素的std::map,其中包含object3作为值和Coordinate(0,0,1)作为键。我怎样才能防止这种情况发生,以便它包含所有值?#pragmaoncestructCoordinate{doublex,y,z;Coordinate(doublex,double

c++ - 如何将非静态类成员 `std::bind` 转换为 Win32 回调函数 `WNDPROC`?

我正在尝试将非静态类成员绑定(bind)到标准WNDPROC功能。我知道我可以通过将类成员设为静态来简单地做到这一点。但是,作为C++11STL学习者,我对使用下的工具非常感兴趣。标题。我的代码如下。classMainWindow{public:voidCreate(){WNDCLASSEXWWindowClass;WindowClass.cbSize=sizeof(WNDCLASSEX);WindowClass.style=m_ClassStyles;WindowClass.lpfnWndProc=std::function(std::bind(&MainWindow::Window

c++ - std::move( ) 在没有 move-ctor 的情况下调用 copy-ctor。为什么以及如何预防?

我想知道是否有一种安全编程实践可以在这种微妙的行为发生时提醒编码人员,或者更好的是,首先避免这种行为。structA的用户可能没有意识到没有move构造函数。在他们尝试调用不存在的ctor时,他们既没有收到编译器警告,也没有收到任何运行时指示调用了复制ctor。下面的答案解释了发生的转换,但我看不出这是一件好事的任何理由。如果缺少以const引用作为参数的构造函数,则会出现编译时错误,而不仅仅是解析为非常量引用版本。那么,当类中没有实现move语义时,为什么尝试使用move语义不会导致编译时错误?有没有办法通过一些编译时选项避免这种行为,或者至少有一种在运行时检测它的方法?在move之

c++ - 保存/序列化 boost 或 std 正则表达式

是否可以对文件进行序列化/反序列化和保存/加载正则表达式?我们有一个非常耗时的过程来构建一些正则表达式,我想知道我们是否可以通过保存和加载它们来节省一些时间。 最佳答案 不,这可能是不可能的,因为无论如何都需要您重新编译正则表达式。但是,如果您使用boost::xpressive,您可以在编译时通过正则表达式的表达式模板构造来编译正则表达式。这将使正则表达式编译时间完全消失。BoostXpressive但是,您使用过多时间的真正原因几乎可以肯定是您通过使用回溯正则表达式引擎不正确地使用了正则表达式,即IE。RE2是传统的自动机正则表

c++ - 有没有我不会使用 std::make_shared 的情况?

根据我所做的研究,这听起来像std::make_shared是构建std::shared_ptr的首选方式。具体是因为:它只执行一次内存分配,而使用new则至少执行两次。如果传递给make_shared的ctor抛出异常,那么它就不会像new那样泄漏。我的问题是,假设我想要一个shared_ptr,我应该总是使用make_shared,还是在某些情况下首选new? 最佳答案 由于计数器和对象共享相同的分配,因此它们也共享相同的释放。计数器必须持续到最后一个shared_ptr和weak_ptr消失。如果您有一个大对象(或许多小对象)

c++ - G++ & Clang++ - 命名空间 std _GLIBCXX_VISIBILITY(默认)

我正在尝试使用clang++编译我的C++代码,但不断收到与namespace冲突的错误。我的main.cpp文件是一个简单的HelloWorld程序(用于调试)。我感觉问题出在我在集群上编译的GCC或clang版本上。关于如何追查这个问题的任何想法?或故障排除步骤?[aebrenne@hpcsrc]$gcc-vUsingbuilt-inspecs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/data/apps/gcc/4.8.1/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapperTarget:x86

c++ - std::function 和 shared_ptr

我使用Loki的Functor有一段时间了,最​​近我问了一个question关于它(仍然没有答案......)有人告诉我使用std::function,但我更喜欢Loki的Functor实现,因为它也可以使用各种指针作为参数(例如std::shared_ptr)。structToto{voidfoo(intparam){std::coutptr=std::make_shared();Loki::Functorfunc(ptr,&Toto::foo);func(1);}有没有办法用std::function做到这一点? 最佳答案 使

c++ - std::bind std::shared_ptr 参数不会增加 use_count

以下代码:#include#include#includestructFoo{Foo():m_p(std::make_shared()){}Foo(constFoo&foo){printf("copy\n");}std::shared_ptrm_p;};voidfunc(Foofoo){}intmain(){Foofoo;std::functionf=std::bind(func,foo);printf("usecount:%ld\n",foo.m_p.use_count());f();}得到结果:copycopyusecount:1copy由于复制了Foo,所以我认为m_p的use_