我想知道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;
}
只允许使用数组吗?也许。遗产怎么样?我认为这是未定义的行为。你知道一些用例吗?这只是关于this[i]
的一些问题,如果你不愿意,不要直接回答这些问题。
答案 0 :(得分:8)
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;
}