小编bja*_*fly的帖子

默认的Move构造函数是否定义为noexcept?

在重新分配时,在确定是否移动或复制元素之前,向量将检查移动构造函数是否标记为noexcept.默认移动构造函数是否定义为noexcept?我看到了以下文档,但没有说明这一点.http://en.cppreference.com/w/cpp/language/move_constructor

隐式声明的移动构造函数

如果没有为类类型(结构,类或联合)提供用户定义的移动构造函数,并且满足以下所有条件:没有用户声明的复制构造函数没有用户声明的复制赋值运算符没有用户声明的移动赋值运算符没有用户声明的析构函数,由于下一节中详述的条件,隐式声明的移动构造函数未定义为已删除,因此编译器将声明移动构造函数作为其类的内联公共成员signature T :: T(T &&)一个类可以有多个移动构造函数,例如T :: T(const T &&)和T :: T(T &&).如果存在一些用户定义的移动构造函数,则用户仍可以使用关键字default强制生成隐式声明的移动构造函数.

c++ constructor move-semantics c++11

64
推荐指数
1
解决办法
1万
查看次数

应该在nullptr赋值上使用std :: move吗?

我遇到了以下情况.在nullptr上进行移动有什么好处吗?我假设它基本上为Node*分配一个零,所以我不确定在这里做一个移动是否有任何好处.有什么想法吗?

template <typename T>
struct Node
{
  Node(const T& t): data(t), next(std::move(nullptr)) { }
  Node(T&& t): data(std::move(t)), next(std::move(nullptr)) { }

  T data;
  Node* next;
};
Run Code Online (Sandbox Code Playgroud)

nullptr move-semantics c++11

13
推荐指数
1
解决办法
5855
查看次数

向量重新分配使用复制而不是移动构造函数

嗨我使用gcc 4.7创建了一个带有noexcept移动构造函数的类Foo,并将向量保留大小设置为2,这样在添加第3项时就必须重新分配大小.在执行此操作时,它似乎正在调用复制构造函数而不是移动构造函数.我在这里错过了什么吗?

#include <vector>
#include <iostream>

class Foo
{
  public:
  Foo(int x) : data_(x)
  {
    std::cout << " constructing " << std::endl;
  }

  ~Foo()
  {
    std::cout << " destructing " << std::endl;
  }

  Foo& operator=(const Foo&) = default;
  Foo& operator=(Foo&&) = default;

   Foo(Foo&& other) noexcept : data_(std::move(other.data_))
   {
    std::cout << " Move constructing " << std::endl;
   }

   Foo(const Foo& other) noexcept :  data_(other.data_)
   {
    std::cout << " Copy constructing " << std::endl;
   }

  private:
  int data_;
};


int main ( …
Run Code Online (Sandbox Code Playgroud)

c++ gcc move-semantics c++11

12
推荐指数
1
解决办法
1545
查看次数

函数重载中的C++默认参数是一次还是每次评估?

我有一个关于对象中的重载函数的默认值的问题.

如果我有一个函数签名,如下所示,默认值只评估一次或每次?

class X
{
  public:
  f(const RWDate& d=RWDate::now());
}

// when calling f() do I get the current time each time?
X z;
z.f();

// is the default value of d recaculated in the function call?
z.f();
Run Code Online (Sandbox Code Playgroud)

c++ overloading default-arguments

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

3d数组在内存中是连续的,那么2d呢?

如果我声明一个2d c风格的数组

int data[X][Y]

我假设编译器会将其创建为类似于的单个数组

int data[X*Y] 但这有保证吗?

让我们假设为简单起见,我们在x86架构上使用标准编译器.那怎么样?

int data[X][Y][Z]

编译器是否将其创建为连续的内存块,并且只是对偏移进行一些调整?

我通常使用单个向量作为带有偏移行*NumCols + col的2d数组,并且有一个内联函数来为我计算它,但我对这个问题的3d数组感兴趣.我还应该问一下是否有人用一个向量做了这个,也有偏移逻辑.

c c++ arrays

7
推荐指数
2
解决办法
505
查看次数

为什么operator <Java泛型有编译器错误?

为什么key < x[mid]下面的条件会导致编译器抱怨操作符未定义?

在C++中,只有当类型T不支持运算符<语义时,这才是编译时警告.你如何在Java中做同等的事情?

package search;

    public class BinarySearch<T>
    {
        public boolean binary_search_iterative (T[] x, T key)
        {
            int size = x.length;
            if ( size == 0 ) { return false; }

            int end = size - 1;

            int start = 0;

            while ( start <= end)
            {
                int mid = (end + start)/2 ;
                if (key < x[mid])
                {
                    end = mid - 1;
                }
                else if ( key > key[mid])
                {
                    start = mid …
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
2
解决办法
267
查看次数

有人可以在这段代码中解释使用BaseTypeX :: BaseTypeX吗?

我有一些代码正在执行以下操作,但我不明白using BaseTypeX::BaseTypeX这个代码实际上做了什么 .其余部分我理解,所以请不要解释模板专业化等.

template<typename TReturn, typename... TArgs>
class ClassX<TReturn(TArgs...)> : public Internal::ClassXImpl<TReturn, TArgs...> {
public:

    using BaseTypeX = Internal::ClassXImpl<TReturn, TArgs...>;
    using BaseTypeX::BaseTypeX; // what is this doing exactly?

    inline ClassX() noexcept = default;

    // member function
    template<class TThis, class TFunc>
        inline ClassX(TThis* aThis, TFunc aFunc) {
            this->bind(aThis, aFunc);  // note bind is implemented in the ClassXImpl class
        }   
Run Code Online (Sandbox Code Playgroud)

c++ templates using template-specialization c++11

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

boost :: thread和std :: thread兼容性问题?

我有一个关于将boost :: threads与一些c ++ 11标准项混合和匹配的问题,这有用吗?我还没有真正测试过任何东西,但我正在使用一个系统,它使用所有boost :: threads和线程组以及你没有开箱即用的中断功能,所以没有变化.我们的boost 1.50版本并没有最新的std :: atomic和内存订购.我想知道我是否可以使用带有boost线程的std :: atomic和std :: memory排序操作load/fectch_add等(获取/释放,放松)并且具有与它们是std :: thread相同的结果.这些都是我的linux机器下的pthreads所以我认为答案是肯定我可以混合搭配.虽然,我只想确认并看看是否有人在混合boost :: thread和std :: thread apis之间存在任何兼容性问题.

c++ multithreading boost c++11

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

GCC编译器标志在本机和haswell之间有所不同

我在Linux haswell盒上,但是在执行此操作时

gcc -march=native -Q --help=target
Run Code Online (Sandbox Code Playgroud)

它具有与编译器不同的编译器开关

gcc -march=haswell -Q --help=target
Run Code Online (Sandbox Code Playgroud)

我输入了以下内容以查看差异

diff -u <(gcc -march=native -Q --help=target) <(gcc -march=haswell -Q --help=target) | grep "^[-|+] "
Run Code Online (Sandbox Code Playgroud)

在这种情况下,是否需要为编译器设置haswell架构类型配置错误的东西?

上面的diff命令显示了以下标志差异。

-  -mabm                                [enabled]
+  -mabm                                [disabled]
-  -maes                                [enabled]
+  -maes                                [disabled]
-  -mavx                                [enabled]
-  -mavx2                               [enabled]
+  -mavx                                [disabled]
+  -mavx2                               [disabled]
-  -mbmi                                [enabled]
-  -mbmi2                               [enabled]
+  -mbmi                                [disabled]
+  -mbmi2                               [disabled]
-  -mcx16                               [enabled]
+  -mcx16                               [disabled]
-  -mf16c                               [enabled]
+  -mf16c                               [disabled]
-  -mfma                                [enabled]
+ …
Run Code Online (Sandbox Code Playgroud)

c++ gcc gcc4.9 c++14

5
推荐指数
0
解决办法
329
查看次数

删除 vim 中的 netrw s-up 和 s-down 映射

我的 .vimrc 文件中有以下映射,用于在窗口之间移动,但是当在 netrw 插件的浏览窗口 :e 中时,下移键将产生一个警告窗口,而不是尊重我的映射。我假设这个映射必须被硬编码到插件本身中。如何删除插件中的上移和上移映射。

nnoremap <silent> <S-Up> :wincmd k<CR>     
nnoremap <silent> <S-Down> :wincmd j<CR>   
Run Code Online (Sandbox Code Playgroud)

尝试上移或下移时显示的窗口如下所示,它显示在新的拆分中,这非常烦人:

**warning** (netrw) using Nexplore or <s-down> improperly; see help for netrw-starstar
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是如何在 netrw 插件中关闭此行为,以便它尊重上面显示的映射。

vim

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