2018년 7월 19일 목요일

STL queue에서 pop에 리턴값이 없는 이유

백준 슬랙에서 누군가 왜 STL queue에서 pop을 쓰면 pop만되고, pop된 값이 리턴되지 않는지 질문했는데, 그에 대한 답으로 아래의 링크를 올려주셨다.

https://stackoverflow.com/questions/25035691/why-doesnt-stdqueuepop-return-value

읽어봤는데, 영어라 확실히 이해한 것 같지는 않지만...
내가 이해한 것을 정리해보면,

"pop을 쓸 때, queue에 있는 해당 값을 제거하게 되기 때문에 해당 값을 리턴해주기 위해서는 해당 값의 참조값(주소값)을 이용해 리턴해줄 수 없고, 따로 값을 저장하고 리턴해야 하는 return by value를 사용해야 하고 이는 비효율적이다. "
라는 의견도 있었고,

하지만 진짜 이유는... 만약 해당 값을 리턴하게 된다면, 리턴하기 전에 해당 엘리먼트를 지워야하기 때문에, 이미 어디에도 존재하지 않는 값을 리턴하는 것이라... exception으로부터 안전하지 못하기 때문에... exception safety를 위해서라고 한다.

사실 정확히 이해는 안 되었지만, exception부분은 C++과 STL에 대해서 좀 공부를 해야 이해할 수 있을 것 같다. C++에 대해서 공부해보고 다시 생각해 봐야겠다.

댓글 없음:

댓글 쓰기