小编Eli*_*iad的帖子

std::shared_ptr 预分配内存

我想既为控制块和预分配存储器value_type用于shared_ptr在一个堆请求(像std::make_shared),但不要在它立即构造的任何对象。当我实际上需要构造对象时,请使用 position new。是否可以?两者都没有std::make_shared或std::allocate_shared似乎没有解决我的问题。

c++ memory-management placement-new shared-ptr c++11

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

将双变量std :: function转换为单变量std :: function

我有一个函数,它获取两个值,x和y,并返回结果:

std::function< double( double, double ) > mult = 
  []( double x, double y){ return x*y; };
Run Code Online (Sandbox Code Playgroud)

现在我想得到一个常量y的单变量函数.我编写了以下代码,但它不起作用.

std::function<
  std::function< double(double) > (
    std::function< double(double, double) >,
    double
  )
> funcYgivenX =
  [](std::function< double(double, double) > func2d, double inX) {
    return [&func2d, &inX]( double inY ) {
      return func2d(inX, inY);
    };
  };
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?什么是最好(最有效)的方法呢?

c++ lambda c++11

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

将C++ 11 std :: function传递给带有boost :: function的遗留函数是否安全

我们有一个遗留系统,它集中使用boost :: function,现在它决定转向更新的现代C++标准.假设我们有这样的遗留函数:

void someFunction(boost::function<void(int)>);
Run Code Online (Sandbox Code Playgroud)

直接传入C++ 11函数是否安全?

//calling site, new C++11 code
std::function<void(int)> func = [](int x){
    //some implementation
}
someFunction(func); //will this always work?
Run Code Online (Sandbox Code Playgroud)

boost :: function是否也能优雅地处理标准C++ 11 lambda?

// will this also work?
someFunction([](int x)->void{
    //some implementation
});
Run Code Online (Sandbox Code Playgroud)

c++ lambda boost c++11 std-function

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

Fortran中的特定双精度函数是否有用?

我注意到使用gfortran tan函数返回与其参数相同类型的实数值; 例如,一个可以传递real(kind=4),real(kind=8)或者real(kind=16)给它并获得结果 real(kind=4),real(kind=8)或real(kind=16)分别.

dtan另一方面,双精度功能并不灵活.如果默认的double类型是8 [1],它们只接受并返回real(kind=8),如果默认类型是16 [2],它们只接受并返回real(kind=16).

是这些定义的行为,如果是这样,双精度函数的用例是什么,或者它们是否过时?


[1]如果有-fdefault-double-8或无编译-fdefault-real-8

[2]如果有-fdefault-real-8和无编译-fdefault-double-8

floating-point fortran gfortran

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

向下转型 `vector&lt;Parent&gt;`

我的程序中存在向上转型和向下转型的问题。我有一个vector<Child>被传递给一个期望的函数const vector<Parent>& pp。到目前为止没有问题(编辑:显然有!请参阅评论)。但是,现在我想传递pp给一个期望的函数const vector<Child>& cc,但我不能这样做。

我应该如何做到这一点,同时我不赋予函数修改原始类的能力?您能否列出执行此操作的各种方法,最好列出它们的优缺点?

c++ class downcast

3
推荐指数
1
解决办法
1730
查看次数

我们可以说构造函数创建对象吗?

有人告诉我构造函数创建对象.但是在互联网上我搜索了在创建对象时执行的构造函数.你能解释一下吗?我是C++的新手

c++ constructor class

3
推荐指数
1
解决办法
97
查看次数

C++虚拟基类:不会调用父级的复制构造函数

我在下面的代码中看到了三个类.请注意我是如何编写复制构造函数的.

#include <iostream>

class Abstract
{
public:
    Abstract(){};
    Abstract( const Abstract& other ): mA(other.mA){};
    virtual ~Abstract(){};

    void setA(double inA){mA = inA;};
    double getA(){return mA;};

    virtual void isAbstract() = 0;
protected:
    double mA;
};

class Parent : public virtual Abstract
{
public:
    Parent(){};
    Parent( const Parent& other ): Abstract(other){};
    virtual ~Parent(){};

};


class Child : public virtual Parent
{
public:
    Child(){};
    Child( const Child& other ): Parent(other){};
    virtual ~Child(){};

    void isAbstract(){};
};


int main()
{
    Child child1;
    child1.setA(5);

    Child childCopy(child1);
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ class copy-constructor

3
推荐指数
1
解决办法
725
查看次数

std :: min_element返回意外结果

我想找到一个向量的最小值:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main () {
    vector<double> v{2, 0, 4};
    double minT = *std::min_element(v.begin(), v.end(),
                                    [](double i1, double i2) {
                                        std::cout << "Comparing: " << i1 << "  " << i2 << "   " << ((i1 < i2)? i1:i2) << "    " << '\n';
                                        return (i1 < i2)? i1:i2;
                                    });
    cout << "Minimum is: " << minT << '\n';
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码的输出是:

Comparing: 0  2   0    
Comparing: 4  2   2    
Minimum is: 4 …
Run Code Online (Sandbox Code Playgroud)

c++ min c++-standard-library c++11

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

什么类型有多维数组?

我正在编写自己的2d矩阵类.我想设计这个类的使用非常接近真正的数学符号.例如,我想访问元素作为矩阵[3,6].但是c ++并没有提供这种能力,但我可以通过下一种方式访问​​基本的多维数组:

int matrix[2][2] = {};
int val = matrix[1][0];
Run Code Online (Sandbox Code Playgroud)

所以我决定创建返回基数组的函数.对于这个角色,最好的函数是operator().所以我可以通过下一个方式访问:matrix()[1] [0].好的,我开始实施它并坚持:(.看看我有什么:

template <typename ValType>
class Matrix2D
{
protected:
    ValType m_data[2][2] = {};

public:
    ValType** operator()()  // <--- what type?
    {
        return m_data;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我在上面的函数中收到了编译器错误

错误C2440:'return':无法从'double [2] [2]'转换为'double**'

我理解错误,但不知道我必须改变什么来避免这个错误?该函数必须返回什么类型?

c++ arrays c++11

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

插入std :: map <int,std :: vector <int >>的简短函数

我发现自己经常处于编写以下代码的情况:

std::map<int, std::vector<int>> dict;

void insert(int key, int val) {
  if (dict.find(key) == dict.end()) {
    dict[key] = std::vector<int>();
  }
  dict[key].push_back(val)
}
Run Code Online (Sandbox Code Playgroud)

编写这个插入函数是否有一种不那么冗长的方式(在C++ 11中)?

c++ insert stdmap stdvector c++11

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

在写入该变量的唯一线程中,使用memory_order_relaxed加载原子变量是否安全?

我有一个写入原子变量的线程.(使用memory_order_release).线程A.

还有许多其他线程可以从该变量中读取.(使用memory_order_acquire).线程B.

在线程A中,使用memory_order_relaxed读取该变量是否安全?

c++ multithreading thread-safety c++11

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