본문 바로가기

c++174

c++17 if statement with initializer if(init; statement){ // ...} 이런식으로 쓸 수 있다.using namespace std; map m = { {1, "a"}, {2, "b"}, {3, "c"}}; if(auto i = m.find(1); i == m.end()){ // not found} for문에 초기화 구문이 있는 것처럼, if문에도 초기화 구문을 지원하는 것이다. 반환값이 iterator인 것이 많은데 이 부분에서 좀 더 깔끔한 코드 작성이 가능해질 것이라 생각한다. 2018. 8. 22.
const std::string& 대신 std::string_view c++17에 추가된 std::string_view는 문자열을 소유하지 않고 참조만 한다.다음과 같은 선언을 가진 함수가 있다.void print(const std::string& str) print 함수의 호출을 다음과 같이 했다고 하자. print("hello world!"); 호출될 때, 내부적으로 std::string 클래스가 만들어지고, 내부적으로 할당된 메모리 배열에 hello world!를 의미하는 값들이 채울 것이다.1~2바이트의 텍스트만 담는데도 메모리 할당을 해버리면 매우 비효율적일 것이다. 컴파일러 중에선 얼마 안 되는 메모리의 경우는 스택의 메모리를 쓰고, 그 이상을 쓰려는 경우 그때서야 메모리 할당을 하는 기법을 쓰기도 한다.(비쥬얼 스튜디오의 경우 길이 15로 기억)위와 같은 상황.. 2018. 2. 20.
boost::variant(std::variant c++17) 사용하기 boost::variant는 n개의 타입이 될 수 있는 타입이다. boost::any와의 차이점은 지정된 형태로만 될 수 있으며 any와는 다르게 타입 변환 시 동적 할당을 사용하지 않기 때문에 퍼포먼스가 좀 더 뛰어나다. boost::variant는 n개의 타입이 될 수 있는 타입이다. union의 c++판 업그레이드 버전 정도 되는 라이브러리라고 생각해도 괜찮다. 또, c++17에 표준으로 포함 되었으며 c++ 관련 커뮤니티에서의 반응도 긍정적이다. 일단 사용하는 방법이 깔끔하고 쉬우니까.코드 >>1234567891011#include boost::variant var; // setvar = 0.01;var = 123;var = "hello"; // getstd::string s = boost::ge.. 2016. 8. 5.
vs2015 update1에서 c++17 module 기능 사용하기 비쥬얼 스튜디오 2015 update1에 c++ 17에 포함될 예정인 module을 사용할 수 있다. 프로젝트를 만들고, ixx 확장자의 파일을 하나 추가한다. ixx 파일 내부를 작성한다. ixx파일의 속성탭을 누른다. cpp라면 기본적으로 c/c++ 컴파일러로 설정이 되어있지만, ixx파일은 직접 설정을 해줘야 한다. 구성 속성 => 일반으로 가서 test.ixx의 항목 형식을 c/c++ 컴파일러로 지정한다. 프로젝트=>속성을 누른다. 구성 속성 => C/C++ => 명령줄로 가서 추가 옵션에 /experimental:module 라고 쓴다. main.cpp를 만들고 내부를 작성해서 빌드! ~! 성공 + 클래스 모듈 testclass.ixx1234567891011121314151617181920212.. 2015. 12. 16.