小编Jac*_*ack的帖子

运算符逗号重载

我正在尝试了解有关运算符重载如何工作的更多信息.

我知道重载逗号运算符可能不是最好的主意,但这只是出于教学目的.

我期待以下代码使用我的重载运算符(我使用括号,因为我知道逗号运算符具有最低优先级)来构造包含(1,2)的向量,然后调用向量的赋值运算符.

但是,我收到一个错误:

no known conversion from argument 1 from 'int' to 'const std::vector<int>&'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样.(1,2)应该构造一个向量,所以它不应该试图从一个转换int为一个vector<int>

#include <vector>
#include <utility>

using std::vector;
using std::move;

template <typename T>
vector<T> operator,(const T& v1, const T& v2)
{
    vector<T> v;
    v.push_back(v1);
    v.push_back(v2);
    return move(v);
}

int main()
{
    vector<int> a;
    a = (1,2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ vector operator-overloading c++11

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

成员函数内存分配堆栈还是堆?

我正在尝试按如下方式分配数组:

class foo{
public:
    void func(){double arr[13][64][64][64];}
};

int main()
{
    foo* inst = new foo();
    inst->func();       
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的答案如下: 这种类型的内存是在堆还是堆栈上分配的? 数组arr将放在堆上(因为类的实例在堆上).当我遇到分段错误时,情况似乎并非如此.如果我将声明更改为:double*arr = new double [13*64*64*64]; (并正确删除)然后一切都很好.

这里发生了什么事?

c++ heap stack memory-management

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