위 코드에서 앞서 답변해주신 대로 catch (char const* msg) 로 변경하니 에러없이 잘 동작했습니다.
이후 define 대신 throw "과목 점수는 ... 다!"; 이런식으로
throw 할때도 const가 필요했습니다.
define의 경우는 변하지않는 값? 으로 알고있어서 const가 그럴싸해보이는데 그냥 문자열도 커서올려서 보니
char const[30] "과목 점수는 ... 다!" 이런식으로 나오더라고요.
문자열이 기본적으로? const char*로 되는이유가 따로 있을까요??
막상 char*="호호" 이러면 const가 없다고 문제라고하고
char*=(char*)"호호" 이러면 cout같은거도 잘 되는데요
- dc official App
해당 댓글은 삭제되었습니다.
그럼 인턴풀을 사용하는건 좀더 유연한? 방법이라고도 볼수있겠네요 그 값을 할당하는게 아니고 참조? 한다라고 이해하면될까요? - dc App
""로 감싼 문자열. 이것은 immutable, 즉 변경할 수 없는 값임. 그러니까 "안녕!"에서 '녕'을 '돼'로 바꾸고싶다면, "안녕!"이 들어있는 메모리에 있는 값을 바꾸는게 아니라 "안돼!"가 새로운 메모리에 들어감. const형태라고 볼수있겠지? 나도 초보임ㅎㅎ;
갑사합니다 그럼 제가 사용하는 환경에선 문자열 치환이 일반적으로는 안된다고 볼수있겠네요 - dc App
다른애들 수준이 높아서 내가 낄게아닌거같군
위험해서? 검색으로 한번 찾아봤는데 Cpp03 까지는 char* 로도 됬었는데, Coo11 부터는 아예 문서 표준서에 스트링 리터럴은 const char[] 이고, 인자나 리턴치로 넘겨질 때는 const char* 가 된다고 함. 그리고 char* 로 변환하는 방법은 없으며 만약 변환될 경우에는 UB 가 발생함 이라고 적혀있다고 함. 덤으로 이에 대한 정보가 있는 주소 올릴려고 했는데 얘네들 링크 막아놔서 못올리겠음...
그럼 위에서 호호 할때 쓴 형변환은 임시라 가능했을까요? - dc App
https://en.cppreference.com/w/cpp/language/string_literal
번역
돌려서 중간부분에 char* 로 바꾸는거 함 보세여
감사합니다 찬찬히 읽어볼게요 - dc App
임시라기보단 표준서에 적혀있지 않은, 컴파일러마다 행동이 다 다를 수 있는 미정의 행동이 되는 것 같은데, 지금 VS 의 C++ 컴파일러에서는 그냥 넘어가기로 해서 되는 것 같아 보이네요...
파라미터에 const를 넣는건 파라미터를 변경하지 않겠다는 의미임.
예전에는 파라미터에 const 쓰는게 권고 사항일 뿐이었는데 강제되었나보네.
파라미터 받아놓고 변경하면 의미가 없겠지... 그냥 확실히 하는것임.
어차피 변할게 아닌데 건드릴지도모르니 고정한다 라는 의미였을까요 앞선 댓글처럼 보안문제로도 볼수있을것도같고요 - dc App
걔네들이 메모리 어디에 저장되는 지 알면 납득이 갑니다.
프로그램의 일부로써 저장되기 때문에 못건드리게 막아놓습니다. 프로그램이 실행중에 막 바뀌면 안되잖아요? 자세한건 여기에
https://youtu.be/htL2IKDtmV8