通过引用或指针

时间:2017-11-10 13:28:24

标签: c++ pointers vector reference

我有以下功能:

void write_to_File(std::vector<uint16_t> *vector) {
    std::fstream file;
    file.open(writePath, std::fstream::out | std::fstream::binary);
    if (file.is_open()) {
         file.write(reinterpret_cast<char*>(&(*vector)[0]), vector->size()*sizeof(uint16_t));
    } else {
        std::cout << "file not found!";
        return;
    }
    file.close();
}

此方法实际上并不会更改vector,但由于它已经被转换,因此我无法将其作为const引用。如果我只使用一个引用,那么cpplint会抱怨它必须是const或指针。

  

警告:这是非const引用吗?如果是这样,make const或使用指针:std :: vector&amp; vector [runtime / references] [2]

我应该忽略cpplint并使其成为引用,保留此代码(使用指针)或使其成为const引用并转换副本?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您的案例中的正确答案是:

void write_to_File(const std::vector<uint16_t>& vector) {
    std::fstream file;
    file.open(writePath, std::fstream::out | std::fstream::binary);
    if (file.is_open()) {
         const auto ptr = reinterpret_cast<const char*>(&vector[0]);
         file.write(ptr, vector.size()*sizeof(uint16_t));
    } else {
        std::cout << "file not found!";
        return;
    }
    file.close();
}

但是,我认为cpplint错误是错误的(当然这是一个意见问题)。我使用规则&#34;如果nullptr是有效值,请使用指针,否则使用引用&#34;。