我开始从C学习C++.最近,我刚读了一本关于C++的教程.在" 介绍流 "一节中,本书注意到:
<<运算符被重载,因此右侧的操作数可以是字符串或任何原始值.如果此操作数不是字符串,则<<运算符在将其发送到输出流之前将其转换为字符串形式.
所以我想知道printf()C中的函数是否具有相同的效果.如果没有,请告诉我他们两者之间的差异.
我认为我下面的Vector类的析构函数应该有if语句来取消它使用的内存.如果arr有一个成员,它将拥有delete arr.如果arr有很多成员,我必须使用delete[] arr.
你能告诉我这是必要的吗?
我的代码:
class Vector {
double * arr;
short dim;
public:
Vector(short d = 0): dim(d) {
arr = NULL;
if (dim < 0) {
dim = 0;
} else {
arr = new double[dim];
}
}
~Vector() {
if (arr != NULL) {
if (dim == 1) {
delete arr;
} else {
delete[] arr;
}
arr = NULL;
dim = 0;
}
}
};
Run Code Online (Sandbox Code Playgroud) 我用这个代码:
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
Run Code Online (Sandbox Code Playgroud)
定义:
double** arr; // arr1 is difined the same way.
arr = new double*[row];
for (int i = 0; i < row; ++i) {
arr[i] = new double[col];
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
}
Run Code Online (Sandbox Code Playgroud)
我用命令构建它:g++ -Wall -Wextra -Wpedantic -c arr.cpp结果:
警告:'void*memcpy(void*,const void*,size_t)'调用中'sizeof'的参数与目标的指针类型'double*'相同; 预期的'double'或显式长度[-Wsizeof-pointer-memaccess]
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
^
Run Code Online (Sandbox Code Playgroud)
我不明白它是什么.你能告诉我如何让它正常工作吗?