这个问题听起来可能有点奇怪,但我从来没有完全理解为什么我们需要有两种不同的语法来删除C++中的动态分配内存?
例如,
int *p = new int[10];
delete[] p; // why not just delete p;?
在普通的老C中,您只需使用free函数来释放分配给指针的内存,而不管分配的元素数量如何。当然,C++要复杂一些,因为它允许类类型调用它们的析构函数等等。但是,我认为使用单一语法删除C++中动态分配的内存没有任何障碍。
有什么根本原因决定使用两个版本,delete和delete[]?
更重要的是,如果您使用delete而不是delete[],大多数编译器甚至都
我来自C++,并使用C#作为新手,只是尝试了一下:
class Class1
{
int mI = 0;
string mS = "ab";
public static Class1 operator + (Class1 obj1, Class1 obj2)
{
return new Class1()
{
mI = obj1.mI + obj2.mI,
mS = obj1.mS + obj2.mS
};
}
public stati
我使用的是Qt6,C++ 11,我声明了两个动态大小的2d数组:
int **A; int **B;
A = new int*[rowCount]();
for(int i = 0; i < rowCount; i++)
{
A[i] = new int[colCount](); //Same for B
}
// Then feed A with some incoming values
我想将所有A的值复制到B中,我知道使用std::-loop比使用-loop更快和更干净,所以我尝试:
std::copy(&A[0][0], &A[0][0]+rowCo
我正在设计我自己的编程语言(叫做Lima,如果你关心它在www.btetrud.com上的话),我正在努力思考如何实现运算符重载。我决定在特定对象上绑定操作符(这是一种基于原型的语言)。(它也是一种动态语言,其中'var‘类似于javascript中的'var’-一个可以保存任何类型的值的变量)。
例如,这将是一个具有重新定义的+运算符的对象:
x =
{ int member
operator +
self int[b]:
ret b+self
int[a] self:
ret member+a
}
我希望它的作用是显
常规的静态分配数组如下所示,可以使用以下公式访问:
const int N = 3;
const int M = 3;
int a1[N][M] = { {0,1,2}, {3,4,5}, {6,7,8} };
int x = a1[1][2]; // x = 5
int y = *(a1+2+N*1); // y = 5, this is what [] operator is doing in the background
数组是内存的连续区域。在动态数组分配的情况下,它看起来不一样,而是有指向数组的指针数组:
int** a2 = new int*[N];
for (int i =
在C++中,我可以通过执行以下操作来更改特定类的运算符:
MyClass::operator==/*Or some other operator such as =, >, etc.*/(Const MyClass rhs) {
/* Do Stuff*/;
}
但是在C中没有类(默认情况下是内置的),那么,我如何才能只对一般函数进行操作符重载呢?
例如,如果我没记错的话,导入stdlib.h会得到->操作符,它只是(*strcut_name).struct_element的语法糖。
那么我如何在C中做到这一点呢?
谢谢。
我正在尝试更仔细地理解C++中的运算符。
我知道C++中的运算符基本上就是函数。我不明白的是,这个函数是什么样子的?
举个例子:
int x = 1;
int y = 2;
int z = x + y;
最后一行如何翻译?是不是:
int z = operator+(x,y);
或
int z = x.operator+(y);
当我同时尝试这两种方法时,编译器出现错误。我调用它们是错误的,还是不允许直接调用C++中的运算符?
我可以在C++中定义一个接受多个参数的数组操作符吗?我是这样尝试的:
const T& operator[](const int i, const int j, const int k) const{
return m_cells[k*m_resSqr+j*m_res+i];
}
T& operator[](const int i, const int j, const int k){
return m_cells[k*m_resSqr+j*m_res+i];
}
但是我得到了这个错误:
error C2804 binary operator
可以重载二进制运算符以在C++中只使用一个操作数吗?
我尝试用类似于以下类来实现这一点:
#include <iostream>
using namespace std;
class IntWrap {
public:
IntWrap operator=(int rhs) {
val = rhs;
return *this;
}
// No second operand for +
IntWrap operator+() {
IntWrap result;
result = val
是否可以编写自己的条件语句或重载当前条件语句?(如if short hand - ?)
我已经做了一些研究,但什么也找不到。我的想法是:
do
{
//Run Application
}if(...)//Only If variables are initialised
如果这是可能的,我该如何在c++中这样做呢?
可能重复:
我正在学习C++,我的问题是使用箭头操作符(->)或取消引用指针*来调用函数之间是否有任何区别。
这两个例子说明了我的问题。
Class* pointer = new Class();
(*pointer).Function(); // case one
pointer->Function(); // case two
有什么关系?