【发布时间】:2018-09-24 11:39:08
【问题描述】:
假设一个函数需要一个指向类型为 T 的向量的指针,但是当我只有一个类型为 T 的向量的向量时(类型不保证是 POD),是这样的
std::vector<std::vector<T>> input;
auto selectedVectorPtr=&input[j];
比这更安全
std::vector<std::vector<T>> input;
auto selectedVectorPtr=&(input[j]);
还假设输入的范围在以selectedVectorPtr 作为参数的函数之前不会结束。
我的担忧(/误解)是:
- () 是否创建任何临时对象?那么取地址不好吗?
- 类型 T 上 & 或 [] 的运算符重载对更改运算符优先级的优先级有任何影响吗?
- 如果向量(或两者)在获得地址后调整大小怎么办?
【问题讨论】:
-
有运算符优先级规则。这与安全无关,而是正确性
-
第二个是“更安全”,因为如果你赶时间,你不能把它误解为
(&input)[j]。否则,它们是等价的。 -
在函数中使用指针必须类似于
(*parameter)[k],但它看起来当然不同,我也关心*parameter[k]。