Я довольно новичок в C++ и, таким образом, пытаюсь понять, как работают указатели и ссылки. Таким образом, у меня есть простая программа, которая должна ссылаться на строку ans, возвращающую ссылку на другую строку. Я тоже не хочу копировать. Вот кодУказатели и ссылки в C++
#include <iostream>
#include <cstdlib>
#include <string>
std::string& string_reverse(std::string& str){
std::string rev = "";
for(int i= str.length() -1; i >=0; i--){
rev+=str[i];
}
return &rev;
}
int main(){
std::string s="";
std::cout<<"Please enter a string..."<<std::endl;
std::cin>>s;
std::cout<< string_reverse(s)<<std::endl;
}
Однако мой код подбрасывает много ошибок. Это действительно помогло бы, если бы кто-то мог разработать различные способы, которыми это может быть сделано, и основная причина для каждого, и это правильный путь.
«вернуть ссылку на другую строку» - который, будучи локальным для функции, уничтожается, прежде чем вы сможете что-либо с ним сделать. Либо вернитесь по значению, либо измените переданную строку на место и не верните ничто, или ссылку на нее. –
Функция объявлена для возврата ссылки, но вы пытаетесь вернуть указатель * *, адрес-оператора '&' приводит к указателю. Но есть проблемы хуже, чем после устранения этой простой проблемы, а именно, что вы возвращаете ссылку на локальную переменную, переменную, выходящую за пределы области действия после выхода из функции, и вы остаетесь с обвисшей ссылкой, и использование этого приведет к [* неопределенное поведение *] (http://en.wikipedia.org/wiki/Undefined_behavior). –
Вообще говоря, вы должны включать ошибки в свой вопрос, когда задаете такие вопросы. Вы не только облегчаете читателям, но и дают им возможность научить вас, как читать ошибки, чтобы вы могли понять сами! – Hurkyl