Сырые указатели в С++1х
От: cppguard  
Дата: 04.04.23 23:13
Оценка:
Если нужно передать владение указателем, то передают unique_ptr, если указатель без владения — сам указатель. Но почему во втором случае не передавать ссылку? Вопрос навеян кодовой базой LLVM и другими открытыми проектами.

Оба примера ниже отлично компилируются:

#include <memory>
#include <string>

int length1(const std::string& s)
{
    return s.length();
}

int length2(const std::string *s)
{
    return s->length();
}

int main() {
    auto s = std::make_unique<std::string>("test");
    return length1(*s) + length2(s.get());
}


причём, в режиме -O3 инструкции идентичны:
; length1(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&): 
mov     eax, DWORD PTR [rdi+8]
ret
; length2(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*):
mov     eax, DWORD PTR [rdi+8]
ret
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.