【发布时间】:2021-07-11 22:30:31
【问题描述】:
我正在尝试通过使用指向它的指针来访问向量的元素。我发现您可以执行类似以下的操作:
std::vector<char> vector= { 'a', 'b','c','d' };
std::vector<char>* vecPointer = &vector;
std::vector<char>& vecReference = *vecPointer;
char value = vecReference[2];
但是,我担心成本。这比直接取消引用指针更好吗?我觉得应该是,因为它正在成为参考,但我不确定。
【问题讨论】:
-
这里没有转换或复制。这基本上是免费的。
-
您可以随时查看编译后的代码,看看引用是否会产生任何类型的开销。在这种情况下,C++ 标准不需要任何特定的行为或结果,因此不同的编译器之间的结果可能会有所不同,甚至可能使用相同的编译器使用不同的优化编译选项。所以,如果你想知道这里的答案,你需要自己弄清楚,看看你的编译器是如何编译上面的代码的。
-
如果有任何成本,通常会由编译器承担(例如优化代码以消除随后不使用或不需要的变量)。从概念上讲,编译器可以选择在运行时进行一些复杂的计算,以将指针转换为引用。实际上,即使在没有优化的情况下进行编译,编译器也不需要这样做,因为它拥有自己进行转换所需的所有信息——现代编译器没有。
-
您可能还想了解“过早优化”的概念。
标签: c++ pointers reference dereference