앗 엄청난 고수이신 C++빌더님이 답변해주시다니 영광입니다
링크해주신 사이트는 열심히 읽어봤지만 제 실력으론 도져히 이해가 안되네요
제가 알고있기론 "abcd" 같은 스트링 리터럴은 상수라서 당연히 rvalue 라야 할거 같은데
그 사이트에선 스트링 리터럴이 lvalue라고 하던데 이유를 모르겠습니다.
a = ++i; 는 lvaue고, a = i++; 은 rvalue라고 하는 것도 이해가 안되고요
당영히 컴파일 되야 할거 같은데 pair에서 레퍼런스 붙이면 왜 컴파일 에러가 나는지도 도체 모르겠습니다
C++빌더님 지식 좀 베풀어 주십시요. 부탁드립니다 ㅠㅠ
빌더(TWx) 님이 쓰신 글 :
: RAD 11.1 님이 쓰신 글 :
: : RAD 스튜디오 11.1이 새로 나왔다고 하길래 기존 버전 싹 밀어 버리고 설치해봤습니다.
: : 근데 황당한? 에러가 발생하네요?
: :
: : #include <iostream>
: : #include <tchar.h>
: : #include <map>
: : #include <string>
: :
: : using namespace std;
: :
: : int _tmain(int argc, _TCHAR* argv[])
: : {
: : map<string, int> map;
: :
: : map["num 1"] = 1;
: : map["num 2"] = 2;
: : map["num 3"] = 3;
: :
: : for(pair<string, int>& p: map)
: : cout << p.first << endl;
: :
: : cout << "end" << endl;
: : }
: :
: : 쓸데없이 카피가 되지않도록 레퍼런스로 선언하면 에러가 나버리네요
: :
: : 근데 웃긴게 다음처럼
: :
: : for(pair<string, int>p: map)
: : cout << p.first << endl;
: :
: : 레퍼런스 빼고하면 에러가 안나긴 합니다만 쓸데없이 카피가 되겠죠
: : 뭐 이런 황당한 에러가 있을까요???
: :
: :
:
:
: 답변:
:
:
: 하나도 황당한 게 아니고 정상적인 겁니다.
:
: 해외 사이트 글들을 줏어다가... 번역기 돌려서 한글로 번역해서
: 마치 자신이 집필한 글 처럼 짜집기 해서 황당하게 소설을 써 놓은 경우가 허다하니...
:
: 국내 한글 사이트 검색하면서 시간낭비 하지 말고...
: 아래 공신력 있는 사이트에서 영어 원문 그대로를 이해될 때 까지 정독해서 읽어 보세요
:
:
https://en.cppreference.com/w/cpp/language/value_category
:
: Value Category에 대한 공부가 되어있지 않은 듯...
: