代码之家  ›  专栏  ›  技术社区  ›  huseyin tugrul buyukisik

哪个向量地址更安全?

  •  4
  • huseyin tugrul buyukisik  · 技术社区  · 6 年前

    假设一个函数需要一个指向T类型向量的指针,但是当我只有一个T类型向量的时候(类型不能保证是POD),这是吗

    std::vector<std::vector<T>> input;
    auto selectedVectorPtr=&input[j];
    

    比这更安全

    std::vector<std::vector<T>> input;
    auto selectedVectorPtr=&(input[j]);
    

    selectedVectorPtr 作为参数。

    我的担心(/误解)是:

    • ()是否创建任何临时对象?那么,把地址记下来是不是不好呢?
    • 运算符是否过载;或[]对更改运算符优先级的优先级有任何影响吗?
    3 回复  |  直到 6 年前
        1
  •  10
  •   Maxim Egorushkin    6 年前

    operator[] has higher precedence then operator& (后缀运算符的优先级最高),因此这里首先计算它,不需要括号。两者之间没有区别 &input[j] &(input[j]) 在这里。


    auto selectedVectorPtr = input.data() + j;
    

    不需要 std::addressof 也在这里。

        2
  •  8
  •   lubgr    6 年前

    这个 operator precedence [] 在领先者之前进行评估 & . 因此,这两个表达式没有区别。

    当您想知道代码片段的安全含义时,有两个问题需要考虑 &input[j]

        3
  •  0
  •   Rizwan    6 年前

    &input[j] &(input[j]) 不会有任何区别。这是因为 operator[] 优先于 operator&

    所以在这两种情况下 &(输入[j])