我想知道什么是使用范围this[i].我知道这显然是一个无用的问题但是请说它是科学.索引标准允许的行为是什么this?我没有找到有关它的信息,cppreference.
愚蠢的例子:
#include <iostream>
class foo {
public:
int value;
void bar(std::size_t size, int a) {
for (std::size_t i = 0; i < size; i++) {
this[i].value = a--;
}
}
};
int main() {
foo foos[42];
(*foos).bar(sizeof foos / sizeof *foos, 42);
for (auto &foo : foos) {
std::cout << foo.value << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它只允许使用数组吗?也许.遗产怎么样?我认为这是未定义的行为.你知道一些用例吗?这只是一些问题this[i],如果你不愿意,不要直接回答这些问题.
this只是一个指针.该ptr[n]语法是相同的*(ptr + n).
你知道一些用例吗?
不,没有正当理由可以使用this[n].类本身不应该假设当前实例是数组的一部分,或者在连续内存中有其他实例关闭.
以这样的方式设计类,使其独立于实例化的位置/方式.
您的代码可以进行现代化/改进.
使用std::array而不是C风格的数组.
不要做手动指针算术.
有foo只处理当前实例.
endl除非您想要刷新cout缓冲区,否则请勿使用.请\n改用.
class foo {
public:
int value;
void bar(int a) {
this->value -= a;
}
};
int main() {
std::array<foo, 42> foos;
for (auto &foo : foos) {
foo.bar(1);
std::cout << foo.value << '\n';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)