2009-08-31 6 views
2

는이하지 않는VS2008 C++ 컴파일러 오류?

string name; 
name = 1; 

:-) 컴파일 :

string name = 1; 

어떤 생각?

나는 이것이 잘못되었다는 것을 알고 있습니다. . . 그것은 요점이 아닙니다. 첫 번째는 웃는 얼굴을 준다.

답변

14

할당 연산자가 "string & operator = (char c)"의 서명을 가지고 있기 때문에 첫 번째 컴파일은 컴파일러에서 1을 char로 변환 할 수 있습니다.

호환되는 서명이없는 복사 생성자를 호출하므로 두 번째 컴파일되지 않습니다.

4

두 번째 예제는 실제로 할당이 아니라 초기화입니다. 이자형. operator= 대신 생성자를 호출합니다. 분명히 클래스 string에는 정수로 인수를 사용하는 생성자가 없지만 대입 연산자에는 문제가 없습니다. 그리고 스마일리가 생기는 이유는 ASCII 값이 1 인 문자이기 때문입니다.

그런데 Visual Studio에는 해당되지 않습니다. 모든 C++ 컴파일러는 같은 방식으로 동작해야합니다.

1

질문과 관련이 없지만 (다른 많은 사람들이) 편집 가능한 코드를 게시하지 않는 이유는 무엇입니까? 겠습니까 :

#include <string> 
using namespace std; 

int main() { 
    string name; 
    name = 1; 
    string name2 = 1; 
} 

너무 많이 물어 보지 않았습니까? 그것이 주어지면, 우리는 "string"이 실제로 임의의 클래스가 아닌 std :: string을 참조한다는 것을 알 수 있습니다.

+0

포함이 표시되지 않으면 표준이라고 가정합니다. 그것이 임의의 클래스라면, 당신은 그것을 보여 주어야합니다. 또한, 그는 정답을 꽤 빨리 받아서 행동을 보았다 (그것을 본 모든 사람들에게). 나는 그것이 그것이 표준이 된 방법이라고 생각합니다. –

+3

여기서 많은 코드 샘플이 충분하지 않다는 것에 동의하지만,이 간단한 것은 더 필요하지 않았습니다. 또한, 이것은 대답이 아니라 주석이어야합니다. – krdluzni

+2

제게는 '문자열'이 의미하는 바를 추측하는 것이 아니라 그 장난감으로 장난감을 만들기 위해 직접 컴파일 가능한 예제를 만들어야한다는 사실입니다. 저는 기성품의 예를 보여준 것에 대해 크게 감사하며, 제가 가진다면 그 질문에 더 가까이 다가 갈 가능성이 큽니다. – sbi