gpt4 book ai didi

c++ - 书错了吗?

转载 作者:太空狗 更新时间:2023-10-29 23:42:37 25 4
gpt4 key购买 nike

template <typename T>
class Table {
public:
Table();
Table(int m, int n);
Table(int m, int n, const T& value);
Table(const Table<T>& rhs);
~Table();
Table<T>& operator=(const Table& rhs);
T& operator()(int i, int j);
int numRows()const;
int numCols()const;
void resize(int m, int n);
void resize(int m, int n, const T& value);
private:
// Make private because this method should only be used
// internally by the class.
void destroy();
private:
int mNumRows;
int mNumCols;
T** mDataMatrix;
};

template <typename T>
void Table<T>::destroy() {
// Does the matrix exist?
if (mDataMatrix) {
for (int i = 0; i < _m; ++i) {
// Does the ith row exist?
if (mDataMatrix[i]) {
// Yes, delete it.
delete[]mDataMatrix[i];
mDataMatrix[i] = 0;
}
}

// Delete the row-array.
delete[] mDataMatrix;
mDataMatrix = 0;
}

mNumRows = 0;
mNumCols = 0;
}

这是我从一本书中得到的代码示例。它演示了如何销毁或释放一个 2x2 矩阵,其中 mDataMatrix 是指向指针数组的指针。

我不明白的是这部分:

for(int i = 0; i < _m; ++i) {
// Does the ith row exist?
if (mDataMatrix[i]) {
//.….

}
}

我不知道为什么这本书使用 _m 作为最大行指针数。它甚至不是类中定义的变量;最大行的变量是 mNumRows。也许它是一些编译器预定义的变量?我很困惑的另一件事是为什么它是++i?预运算符,为什么不是 i++?如果我把它改成 i++ 会有所不同吗?

最佳答案

Another thing I am quite confuse is why is it ++i? pre-operator, why not i++? Will it make different if I change it into i++?

因为 ++i 更自然也更容易理解:递增 i 然后产生变量 i 作为结果。 i++ 另一方面意味着将 i 的当前值复制到某处(我们称之为 temp),增加 i , 然后产生值 temp 作为结果。

此外,对于用户定义的类型,i++ 可能比 ++i 慢。

请注意,++i 作为循环增量并不意味着增量发生在进入循环体或其他内容之前。 (这似乎是初学者中常见的误解。)如果您不使用 ++ii++ 作为更大表达式的一部分,则语义完全相同,因为前缀和后缀增量仅在它们的结果(增量变量与旧值)上不同,而不是它们的副作用(增量变量)。

关于c++ - 书错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com