用例和`this [i]`的行为

时间:2017-12-01 10:03:05

标签: c++ this

我想知道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]的一些问题,如果你不愿意,不要直接回答这些问题。

1 个答案:

答案 0 :(得分:8)

this只是一个指针。 ptr[n]语法与*(ptr + n)相同。

  

你知道一些用例吗?

不,没有正当理由使用this[n]。类本身不应该假设当前实例是数组的一部分,或者在连续的内存中有其他实例关闭。

以这样的方式设计类,使其独立于实例化的位置/方式。

您的代码可以进行现代化/改进。

  1. 使用std::array代替C风格的数组。

  2. 不要进行手动指针运算。

  3. foo仅处理当前实例。

  4. 除非您要刷新endl缓冲区,否则请勿使用cout。请改用\n

  5. 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;
    }