반응형
bool 변수의 값이 false일 경우에만 특정 작업을 수행하고, true로 변경하는 경우가 빈번하게 발생한다.
기존에는 보통 아래와 같이 코드를 작성했다.
bool isFirst{false};
if (isFirst == false)
{
// 작업을 수행
...
...
isFirst = true;
}
C++14 이후에는 std::exchange를 사용하여 간결한 코드로 작성할 수 있으며, bool형 이외의 변수값을 변경할 수도 있다.
1. 사용법
#include <utility>
std::exchange( var, new-value )
(1) 인자
1-1) var : 값을 변경할 변수나 객체
1-2) new-value : 변경할 값
(2) 반환값 : 변경전의 var 값
2. 사용 예제
bool isFirst{false};
if (std::exchange(isFirst, true) == false)
{
// 작업을 수행
...
...
}
3. 사용 예제 (컨테이너에 사용)
#include <iostream>
#include <utility>
#include <vector>
template <typename T>
void printContainer(const T& pContainer)
{
for (const auto& v : pContainer)
{
std::cout << v << " ";
}
std::cout << std::endl;
}
int main()
{
std::vector<int> vec{};
// vector에 값을 저장
std::exchange(vec, {1,2,3,4});
printContainer(vec); // 1 2 3 4
// vector의 값을 변경
std::vector<int> oldVec{std::exchange(vec, {5,6,7,8})};
printContainer(oldVec); // 1 2 3 4
printContainer(vec); // 5 6 7 8
return 0;
}
4. 사용 예제 (함수에 사용)
#include <iostream>
#include <utility>
#include <functional>
int main()
{
std::function<void()> fFunc{[](){
std::cout << "Original Function" << std::endl;
}};
fFunc(); // Original Function
std::function<void()> fOldFunc{std::exchange(fFunc, [](){
std::cout << "New Function" << std::endl;
})};
fFunc(); // New Function
fOldFunc(); // Original Function
return 0;
}
반응형