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;istd::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;
    }