return
진술에 대해 새로운 것을 발견했습니다. for
및 if
과 조합하여이 강제 디버거는 함수에서 제어를 반환하지 않고 대신 다음 문으로 진행하지만 함수 내부에 스택하고 조건이 참이 될 때까지 for
을 반복합니다. 예를 들어 :C++ return 문이 이상한 동작입니까?
struct Position
{
int position;
int value;
};
vector<Position> find_all(vector<Position>& v, int value)
{
vector<Position> res;
for (auto p = v.begin(); p != v.end(); ++p)
if (p->value == value)
res.push_back(*p);
return res;
}
int main()
{
vector<Position> v { { 0, 0 }, { 1, 1 }, { 2, 0 }, { 3, 3 },
{ 4, 4 }, { 5, 6 }, { 6, 0 }, { 7, 2 } };
find_all(v, 0);
cin.get();
return 0;
}
당신이 return res;
에 디버거를 설정하고 함수가 루프 종료에 대한 때까지 함수 내에서이 실행을 계속이 방법으로 단계 때, 코드를 디버깅을 시작하면, 대신 돌아갑니다. if
문에 중괄호를 설정하면 정상적으로 작동합니다.
이해가 안됩니다. 어떤 일이 일어 났는지, 왜 그런지 설명해주십시오. 나는 VisualC++
을 사용하고 있지만이 유형은 Stroustrup 서적에서 return
사용법을 발견했습니다.
""if "문에서 중괄호를 설정하면 정상적으로 작동합니다. *"-이 코드를 표시 할 수 있습니까? – Maroun
아마도 IDE/디버거의 "기능"일 것입니다. 확실히 C++ 언어와 관련이 없습니다. –
& Maroun Maroun vector find_all (벡터 & v, int 값) { 벡터 res;(자동 p = v.begin(); p! = v.end(); ++ p) if (p- 값 == 값) { res.push_back (* p); } return res; } –
ChaosDev