2017-01-28 3 views
2

Я пытаюсь прочитать из сокета asio в std :: string без копирования. Эта реализация, похоже, работает, но я не уверен, надежна ли она.Запись из asio :: ip :: tcp :: socket непосредственно в std :: string

string read(int bytes) 
{ 
    string str; 
    str.resize(bytes); 
    char* buffer = (char*) str.data(); 
    //socket is declared as class member 
    asio::read(socket,asio::buffer(buffer,bytes)); 
    return str; 
} 
+1

Ваш вопрос относится к общей категории «могу ли я написать непосредственно в буфер' std :: string'? ». [Выглядит как дубликат] (http://stackoverflow.com/questions/25169915/is-writing-to-str0-buffer-of-a-stdstring-well-defined-behaviour-in-c11) – PaulMcKenzie

+0

Что вы не уверены ? –

+0

@PaulMcKenzie да, это был почти ответ, который я искал, но это 'string.data()' и '& string [0]' то же самое? – Freggar

ответ

2

Да, что работает. Но это будет намного более оперативно использовать его непосредственно:

std::string read(int bytes) 
{ 
    std::string str; 
    str.resize(bytes); 

    asio::read(socket, asio::buffer(str)); 
    return str; 
} 

Таким образом, вы избежать все противный Несса вашего C-стиль переинтерпретировать гипс. (Который, кстати, также отбрасывает const)

Смежные вопросы