我想既为控制块和预分配存储器value_type用于shared_ptr在一个堆请求(像std::make_shared),但不要在它立即构造的任何对象。当我实际上需要构造对象时,请使用 position new。是否可以?两者都没有std::make_shared或std::allocate_shared似乎没有解决我的问题。
我有一个函数,它获取两个值,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)
我在这做错了什么?什么是最好(最有效)的方法呢?
我们有一个遗留系统,它集中使用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) 我注意到使用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
我的程序中存在向上转型和向下转型的问题。我有一个vector<Child>被传递给一个期望的函数const vector<Parent>& pp。到目前为止没有问题(编辑:显然有!请参阅评论)。但是,现在我想传递pp给一个期望的函数const vector<Child>& cc,但我不能这样做。
我应该如何做到这一点,同时我不赋予函数修改原始类的能力?您能否列出执行此操作的各种方法,最好列出它们的优缺点?
有人告诉我构造函数创建对象.但是在互联网上我搜索了在创建对象时执行的构造函数.你能解释一下吗?我是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) 我想找到一个向量的最小值:
#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) 我正在编写自己的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**'
我理解错误,但不知道我必须改变什么来避免这个错误?该函数必须返回什么类型?
我发现自己经常处于编写以下代码的情况:
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中)?
我有一个写入原子变量的线程.(使用memory_order_release).线程A.
还有许多其他线程可以从该变量中读取.(使用memory_order_acquire).线程B.
在线程A中,使用memory_order_relaxed读取该变量是否安全?