문자열에서 다른 문자로 일부 문자를 복사하려는 루프에서 작업하고 있습니다. 나는 루프 외부에서이 작업을 수행 할 수 있도록 제한은 20 자입니다 알고QString :: clear() 함수를 사용하여 Qt 문자열의 예약 된 공간을 잃어 버리십니까?
QString name;
name.reserve(25);
내가 작성 될 버퍼를 준비하고 Qt는 그것의 이름은 구문 분석 할 때마다 재 할당 피할 그런 식으로. 단, 이름을 얻으려면 다음과 같이하십시오.
for(int i(0); i < 20 && *s != '\0'; ++i)
{
name += *s;
}
즉, 매번 이름을 재설정해야합니다. 어떻게해야하고 예약 된 공간이 매번 손실되지 않는지 확인하십시오.
// will reserved memory be lost after this call?
name.clear();
// would that be more likely to keep the memory buffer?
name = "";
설명서가 어떤 식 으로든 말하지 않는 것 같습니다.
루프의 전체 집합은 이런 식입니다 : QString::clear()
를 호출
QString name;
name.reserve(25);
for(QChar const *s(input.data()); *s != '\0'; ++s)
{
...snip...
if(<some condition>)
{
name.clear() // losing reserved data here?
for(int i(0); i < 20 && *s != '\0'; ++i)
{
name += *s;
}
...snip...
}
...snip...
}
'name.clear()'가 내부 버퍼를 지우지 만'name + = ... '이 확실히하지 않는다면 확실하지 않습니다. 당신이 실제로'clear()'를 통해 버퍼를 보존 할 필요가 있는지, 또는 어떤 이유로'+ ='가'clear()'와 같은 효과를 가지고 있다고 생각하는지는 명확하지 않습니다. –
'.clear()'가 궁금합니다. '+ ='를 수행하는 루프는 다른 루프 안에 있으므로'name + = * s; '가있는 루프가 발생할 때마다 예약 된 버퍼를 유지하려고합니다. –