C++ “this[i]的用例和行为`
我想知道C++ “this[i]的用例和行为`,c++,this,C++,This,我想知道这个[I]的使用范围是什么。我知道这显然是一个没用的问题,但就科学而言。该标准允许哪些行为来索引此?我没有找到关于它的信息 愚蠢的例子: #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--;
这个[I]
的使用范围是什么。我知道这显然是一个没用的问题,但就科学而言。该标准允许哪些行为来索引此?我没有找到关于它的信息
愚蠢的例子:
#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;
}
#包括
福班{
公众:
int值;
空心条(标准::大小\u t大小,整数a){
对于(std::size\u t i=0;i std::cout这只是一个指针。ptr[n]
语法与*(ptr+n)
相同
你知道一些用例吗
不,没有有效的理由使用此[n]
。类本身不应假定当前实例是数组的一部分,或者相邻内存中有其他实例
设计类的方式使其独立于实例化的位置/方式
您的代码可以显著现代化/改进
使用std::array
代替C样式的数组
不要做手动指针运算
让foo
只处理当前实例
除非要刷新cout
缓冲区,否则不要使用endl
。请改用\n
class-foo{
公众:
int值;
空心条(INTA){
该->值-=a;
}
};
int main(){
std::数组foos;
用于(自动&foo:foos){
富吧(1);;
std::cout相关但不太一般:AFAIK此[i]
与*(此+i)
相同。只要我不超过数组的边界,这应该是正常的。对于单个对象,只要大小为0
,代码也应该是正常的。但为什么要编写这样一个怪物?(*foos).bar
通常写为foos->bar
@SimonKraemer你不想知道…一个朋友从他的韩国队友那里给我发了代码;)。当我看到他们使用这个[I]
(顺便说一句,他们的代码显然是错误的,到处都是越界的;)),我只是问自己什么是用例。@Stargateur-你的代码可能不是一个“用例”这是一个代码,它不适合理解C++中指针的用法。Clang在C++中使用这些方法来模拟灵活的数组成员。@ TalnLAMLA,我很好奇,看看它们是如何运行的,你有链接吗?“你的代码可以被显著地现代化。”,这显然不是我问题的重点,顺便说一句,你的代码与我的代码不一样。@Stargateur:我知道这不是你问题的重点。这只是额外的建议。afaik 3和4不是关于现代化,但使用这个[I]
和endl
永远不仅仅是结束一行
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;
}