Может кто-нибудь, пожалуйста, объясните мне, что здесь происходит? (Я недостаточно знаком с C++).Копировать конструктор изменяет std :: string
У меня есть std::string
, который начинается с 4 int32_t
, добавленного с помощью двоичного stringstream и вызывающего метод write()
.
Когда я это делаю, index
, type
и tag
(3 из 4 int32-ts) верны.
SocketInfo currentSocketInfo;
currentSocketInfo.header.reserve(_headerLength);
int iResult = recv(socket, ¤tSocketInfo.header[0], _headerLength, 0);
auto headerIntPtr = reinterpret_cast<const int32_t*>(currentSocketInfo.header.c_str());
int32_t index = headerIntPtr[1];
int32_t type = headerIntPtr[2];
int32_t tag = headerIntPtr[3];
appendCurrentMessageFromSocket(socket, currentSocketInfo);
Однако, когда я передать currentSocketInfo
в функцию по значению, а затем делать точно такой же reinterpret_cat и задания, значения различны. (Сначала они похожи на 0, 1, 0, но после вызова функции они похожи на это -252142 < - Неточное число, просто похоже).
void SocketListener::appendCurrentMessageFromSocket(SOCKET socket, SocketInfo socketInfo) {
auto headerIntPtr = reinterpret_cast<const int32_t*>(socketInfo->header.c_str());
int32_t index = headerIntPtr[1];
int32_t type = headerIntPtr[2];
int32_t tag = headerIntPtr[3];
}
Вот SocketInfo
класс, часть связана с вопросом является только поле заголовка:
class SocketInfo {
public:
bool waitingForWholeMessage;
std::string header;
std::string body;
int32_t expectedLength;
};
Что такое 'SocketInfo'? Не могли бы вы дать нам [минимальный полный пример] (http://stackoverflow.com/help/mcve)? – Beta
Добавил класс SocketInfo, извините, что забыл. –
", когда я передаю currentSocketInfo функции по значению, затем выполните то же самое reinterpret_cat и присваивания:« Покажите этот код. Кроме того, какой компилятор вы используете и какую версию? –