2016-09-27 7 views
-2

, 나는 또 다른 호기심 라인에 달렸다 :비 멤버 함수 선언의 시작 부분에있는 const에는 어떤 영향이 있습니까? MSDN을 통해 파고

// This function returns the constant string "fourth". 
const string fourth() { return string("fourth"); } 

전체 예제는 여기에 묻혀 :

#include <iostream> 

const int f() { return 0; } 

int main() { 
    std::cout << f() << std::endl; 

    return 0; 
} 

다른 몇 가지 테스트 : https://msdn.microsoft.com/en-us/library/dd293668.aspx는 최소 베어 정제, 그것은 다음과 같습니다 Visual Studio와 g ++ 둘 다 경고없이이 같은 컴파일 라인을 보여 주지만 아직 const 한정자는 결과로 할 수있는 것에 아무런 영향을 미치지 않는 것으로 나타났습니다. 누구든지 중요한 부분의 예를 제공 할 수 있습니까?

+0

가능한 복제본 [Const 객체를 반환해야합니까?] (http://stackoverflow.com/questions/12051012/should-i-return-const-objects) – Sergey

답변

1

그것은 반환 형식의 일부와 동일합니다. 함수는 const stringconst int을 반환합니다. 당신이 int 리턴 값으로 할 수있는 유일한 것은 어딘가에 값을 복사하는 것입니다 때문에 const int의 경우

, 이것은 참으로 int에 비해 차이가 없습니다 (사실,이 표준은 명시 적으로 const 아무런 효과가 없다고 말한다 이리). fourth()const string을 반환

fourth().erase(1); 

이 경우 컴파일 실패 : 클래스 형식의 반환 값이 호출 멤버 함수를 가질 수 있기 때문에 const string의 경우

, 그것은, 변화를 않습니다 erase()const 메서드가 아니기 때문에 ( string이 호출 됨) 수정합니다.

는 개인적으로, 나는 (일부 사람들은 string s = fourth().erase(1);처럼 쓰는 것을 방지하기 위해 유용하다고 생각하지만)가 불필요하게 호출을 제한 같은 값을 돌려 기능을하는 const 값을 반환하지 않습니다 않습니다.

2

당신은 반환 된 개체를

예를 수정할 수 없습니다 :

#include <string> 
using namespace std; 

const string foo(){return "123";} 
string bar(){return "123";} 

int main(){ 
    //foo().append("123"); //fail 
    bar().append("123"); //fine 
} 

이 거의 const를 변수

#include <string> 
using namespace std; 

const string foo = "123"; 
string bar = "123"; 

int main(){ 
    //foo.append("123"); //fail 
    bar.append("123"); //fine 
}