小编Mar*_*ese的帖子

在构造函数中的default-construct对象中未声明变量

上面的代码不起作用.实际上,构造函数f中的默认构造对象Foo抱怨该值val未在范围中声明.我不明白为什么没有宣布.

struct Foo2
{
  Foo2(int val)
  {}
};

struct Foo
{
  Foo(int val, Foo2 f = Foo2(val))
  {}
};

int main()
{
  Foo f(1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor default-constructor

7
推荐指数
1
解决办法
195
查看次数

避免重新定义预处理器变量

我有各种预处理器变量,它们在不同的库中具有相同的名称.

为了避免冲突,我正在做的是(在示例中,为简单起见,只有1个冲突的变量和1个标头):

#ifdef VAR
#define TEMPVAR VAR
#undef VAR
#endif   

#include "conflictingheader.hh" 

#ifdef VAR
#undef VAR
#endif

#ifdef TEMPVAR
#define VAR TEMPVAR
#undef TEMPVAR
#endif
Run Code Online (Sandbox Code Playgroud)

是否有一种自动方式来存储所有冲突的变量,取消定义它们并在以后恢复它们?

或者是否可以定义宏来执行这些操作?

c++ variables redefine c-preprocessor

5
推荐指数
1
解决办法
1057
查看次数

完美转发的身份功能

我想编写一个函数identity,它可以完美地转发其参数而无需任何副本。我会写这样的东西

 template< typename V >
 inline V&& identity( V&& v )
 {
   return std::forward< V >( v );
 }
Run Code Online (Sandbox Code Playgroud)

但这是正确的吗?它是否总是返回正确的类型?v如果它是左值/左值引用/临时,它是否简单地独立转发?

c++ forwarding c++11

4
推荐指数
1
解决办法
797
查看次数

C ++提取指针类型

假设我有

typedef T* PtrType;
Run Code Online (Sandbox Code Playgroud)

有没有办法从PtrType类型中提取T

c++ pointers typedef

2
推荐指数
1
解决办法
593
查看次数

C++ 11线程死锁

我已经为线程编写了一个简单的同步,但它死锁,我不知道如何以一种聪明的方式修复它.

我有一个

std::atomic<int> count_;
Run Code Online (Sandbox Code Playgroud)

在我的main中声明(它被初始化等于0)并且每个线程运行此代码

count_++;
while(!(count_%size_==0)); // wait until all the threads have reached this point
Run Code Online (Sandbox Code Playgroud)

哪里

size_
Run Code Online (Sandbox Code Playgroud)

是启动的线程数(在我的情况下为2).这个同步代码在线程内运行了几次(在我的例子中为3).

有时它工作正常,但有时它会死锁.

我认为有时候,在第一次调用此屏障时,线程会再次递增count_,之后另一个线程会测试导致死锁的条件.

如何在不增加任何延迟功能的情况下解决此问题?有没有更好的方法在线程内创建检查点?

multithreading deadlock c++11

0
推荐指数
1
解决办法
242
查看次数