我有一个字节向量std::vector<char>。我想将其数据send从 Windows Sockets API 传递给一个函数。我首先想到的是这样做:
std::vector<char> data;
// На этом моменте вектор заполняется данными
send(socket, data.data(), data.size(), 0);
然而,由于 我正在使用旧的标准 C++(Visual Studio 2008 SP1),我不能使用该方法data(),它只是不存在。然后我求助于这个:
std::vector<char> data;
// На этом моменте вектор заполняется данными
send(socket, &data[0], data.size(), 0);
我做了几个“实验”,创建了不同长度的向量,用数据填充它们,然后以相同的方式获取数据(即仅通过指针及其偏移量)并且没有发生错误。基于此,我假设这种将矢量数据传递给函数send的方式是可行且安全的。但是,在我看来,这种方法仍然看起来“歪曲”,而根据我的经验,看起来“歪曲”的一切都充满了许多陷阱(即,在任何情况下程序都可能出现不安全行为)。
因此问题是:以这种方式将向量数据std::vector<char> data传递给函数是否安全,在什么情况下会导致不好的事情(UB、异常等)?send&data[0]
PS 请不要建议使用更新的语言标准。这对我来说是不可能的。

