2017-09-03 3 views
-1

여러 파일이 저장된 디렉토리가 있습니다.boost :: filesystem :: path는 연산자로 기본 변수를 변경합니다./

예 : C : \ 테스트 내용 \
: TEST.TXT, info.txt, dir2는/

boost::system::filepath을 운영자 /=+=와 경로가 seperators 시스템을 사용할 수있는 가능성이 사용.
두 함수 모두 기본 변수를 변경합니다. 임시 변수를 사용하면 약간의 오버 헤드가 발생하며 필자가 필요로하는 연산자 나 함수를 잊어 버렸는지 궁금합니다. 내가 디렉토리에 다시 얻을 다음 파일 이름으로 다시 함수를 호출 할 수있는 파일 이름을 제거해야 할 것입니다이 기능 1 호출 후 예를

boost::filesystem::path pathTmp = boost::filesystem::current_path(); // imagine this returns C:\test 
function1(pathTmp /= "test.txt"); // this would call the function1 with "C:\test\test.txt" but also modify pathTmp 

를 들어

. 아니면 내가 pathTmp의 임시 복사본을 만들어 pathTmp이 임시 복사본을 재 할당하고 거기에서 이동합니다

boost::filesystem::path pathCopy = pathTmp = boost::filesystem::current_path(); // imagine this returns C:\test 
function1(pathTmp /= "test.txt"); // this would call the function1 with "C:\test\test.txt" but also modify pathTmp 
pathTmp = pathCopy; 
function1(pathTmp /= "info.txt"); 
내가없이 잘 구분이있는 경로에 파일 이름을 추가하는 기능의 어떤 종류를 잊어 버린 경우 궁금 해서요

임시 복사본이 필요하거나 파일 이름을 다시 제거하려면 값 비싼 호출이 필요합니다.

+6

'operator /'를 사용 하시겠습니까? – cpplearner

+0

내 질문에 대한 완벽한 대답. 당신이 대답하지 않았기 때문에 나는 당신의 답을 인용함으로써이 질문을 해결할 것입니다! +1 –

답변

-1

, 나는 그를 인용하고

그냥 연산자를 사용하여 응답으로이 마킹 해요 /? - cpplearner

2

연산자 /=은 내가 아는 모든 프로그래밍 언어 (C, C##, C++를 포함하되 이에 국한되지 않음)에서 왼쪽을 변경합니다. 일반적으로

: 내 질문에 대한 코멘트에 @cpplearner answerd으로

x += y; // is equivalent to x = x + y; 
x -= y; // is equivalent to x = x - y; 
x /= y; // is equivalent to x = x/y; 
x *= y; // is equivalent to x = x * y; 
x &= y; // is equivalent to x = x & y; 
x |= y; // is equivalent to x = x | y; 
x ^= y; // is equivalent to x = x^y; 
x %= y; // is equivalent to x = x % y; 
+0

그렇습니다. 연산자가 boost :: filesystem :: path처럼 오버라이드 된 경우를 제외하고는 다른 기능을 가지고 있습니다. –

+1

분명히이 경우가 아닙니다. 실제로 이것은 과부하 연산자가있는 유형의 설계 원칙입니다 (Least Surprise 원칙) – sehe

+1

경로 a, b; 등가 :'a/= b' 및'a = a/b' – sehe

관련 문제