C++ 7.3 return 문 -- -- 반환 참조, 비 참조 유형

6816 단어 c++-primer

간단한 소개


함수가 인용 형식을 되돌릴 때, 되돌림 값을 복사하지 않습니다.반대로 되돌아오는 것은 대상 자체다.
13.1절에는
==================================================================================================================

1. 반환 값이 없는 함수 - void 함수


return 문장은 현재 실행 중인 함수를 끝내고 이 함수를 호출하는 함수에 제어권을 되돌려줍니다.return 문은
  • return;//반환 값이 없습니다.void 함수
  • 에 대한 것입니다.
  • return expression;

  • 1. 반환 값이 없는 함수 - -void 함수

  • 되돌아오는 값이 없는return 문장은 되돌아오는 형식이void인 함수에만 사용할 수 있습니다.
  • void 형식으로 되돌아오는 함수에서return 되돌아오는 문장은 필요하지 않을 수도 있고 없을 수도 있습니다.
  • 은식return은 함수의 마지막 문장이 완성될 때 발생한다.
  • 일반적인 상황에서 반환 유형은void의 함수로return문장을 사용하는 것은 함수의 강제적인 끝을 일으키기 위한 것이다. 이런return의 용법은 순환 구조의break문장 작용과 유사하다.
  • 반환 형식이void인 함수는 보통 두 번째 형식의return 문장을 사용할 수 없지만 다른 반환 형식인void의 함수 호출 결과를 되돌릴 수 있다.
  • void swap(int &v1,int &v2){
       if(v1==v2)
        return; // , 。
       int tmp=v2;
       v2=v1;
       v1=tmp;
    // return  。
    }
    void do_swap(int &v1,int &v2){
      int tmp=v2;
      v2=v1;
      v1=tmp;
      //void return  !!!
    }
    void swap(int &v1,int &v2){
      if(v1==v2)
      return false;// !!!!!void bool 
      return do_swap(v1,v2);  // 
    }

    2. 반환값이 있는 함수


    1. 반환값이 있는 함수

  • return 문장의 두 번째 형식은 함수의 결과를 제공했다.모든 반환 형식은void의 함수가 아니라 하나의 값을 반환해야 하며, 이 반환 값의 형식은 함수의 반환 형식과 같거나 은식으로 함수로 전환될 수 있는 반환 형식이어야 한다.
  • return 문장을 포함하는 순환 후에 return 문장을 제공하지 않는 것은 매우 위험합니다. 컴파일러가 이 빈틈을 검출할 수 없기 때문에 실행에 문제가 발생하지 않을지 불확실합니다.
  • bool str_subrange(const string &str1,const string &str2){
    
    if(str1.size()==str2.size())
      return str1==str2;// , bool 
    
    string::size_type size=(str1.size()size()?str1.size():str2.size())
    string::size_type i=0;
    while(i!=size){
       if(str1[i]!=str2[i])
       return ;// , , void 。
    }
    // !!! return  。
    }
    

    2. 주함수main의 반환값

  • 되돌아오는 형식은void의 함수가 아니라 값을 되돌려야 하지만main 함수는 예외로main 함수는 되돌아오는 값이 없으면 끝낼 수 있습니다.
  • 만약 프로그램이 주 함수main의 마지막 문장을 실행하도록 제어하지 않았다면 컴파일러는 0으로 되돌아오는 문장을 은밀하게 삽입할 것이다.
  • 주함수main이 되돌아오는 또 다른 특별한 점은 되돌아오는 값을 어떻게 처리하는가이다.주 함수main이 되돌아오는 값을 상태 표시기로 볼 수 있으며, 0을 되돌아오는 것은 프로그램이 성공적으로 실행되었음을 의미하고, 다른 대부분의 되돌아오는 값은 실패를 의미한다.0 반환 값이 아닌 의미는 기계에 따라 다르기 때문에 반환 값을 기계에 독립시키기 위해 cstdlib 헤더 파일에 두 개의 예처리 변수를 정의하여 프로그램의 실행 성공과 실패를 나타냅니다.

  • 3. 비인용 형식으로 되돌아오기(잘 몰라요)

  • 함수의 반환값은 호출 함수에 생성된 임시 대상을 초기화하는 데 사용되며, 구해 표현식에 연산 결과를 저장할 곳이 필요하면 컴파일러는 이름이 없는 대상을 만든다. 이것이 임시 대상이다.
  • 함수 반환값으로 임시 대상을 초기화하는 것은 실참으로 형삼을 초기화하는 방법과 같다(복제). 반환 형식이 인용이 아니라면 함수를 호출하는 곳에서 함수 반환값을 임시 대상에게 복제한다.
  • 함수가 비인용 형식을 되돌릴 때 그 되돌림 값은 국부 대상일 수도 있고 구해 표현식의 결과일 수도 있다.
  • string make_plural(size_t ctr,const string &word,const string &ending){
    
        return (ctr==1) ? word: word+ending;
    }
    // word , string , word ending , ,return  string 。

    4, 반환 참조 유형


    함수가 인용 형식을 되돌릴 때, 되돌림 값을 복사하지 않습니다.반대로 되돌아오는 것은 대상 자체다.
    const string &shorterString(const string &s1,const string &s2){
    
       return s1.size()// const string , , string 。

    5, 제발 국부적 대상의 인용으로 돌아가지 마세요- 왜!!!!


    함수가 실행되면 국부 대상에게 분배된 저장 공간을 방출합니다.이 때 국부 대상에 대한 인용은 부정확한 메모리를 가리킨다.
    const string &mainp(const string &s){
        string ret =s;
        return ret;// , 
    
    }

    6, 인용 반환 왼쪽 값


    인용된 함수를 되돌려줍니다. 따라서 이 함수는 왼쪽 값을 요구하는 곳에 사용할 수 있습니다.
    char &get_val(string &str,string::size_type ix){// ,string  string::size_type 
    return str[ix];
    }
    int main(){
    string s("a value");
    cout<0)='A';// s[0] A
    
    cout<return 0;
    // , const char &get_val(.......)
    }

    7. 국부적 대상을 가리키는 바늘로 되돌아오지 마라


    국부 대상을 가리키는 바늘을 되돌려주는 것도 잘못된 것이다. 함수가 끝나면 국부 대상은 방출되고 되돌아오는 바늘은 존재하지 않는 대상을 가리키는 현수 바늘이 된다.(5.11)

    좋은 웹페이지 즐겨찾기