Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

Visual Studio

[C++] lambda의 static 선언에 대하여 본문

Computer Engineering

[C++] lambda의 static 선언에 대하여

emacser 2024. 4. 22. 16:33

캡쳐 없는 람다의 경우 대부분의 컴파일러에서는 최적화를 해주기 때문에 static을 붙이건 붙이지 않건 동일하게 동작한다. 다만 명시적으로 한번만 선언되길 원한다면 static으로 선언한다.

 

캡쳐 있는 람다의 경우에는 static으로 선언한 람다가 캡쳐를 갖고 있다면 실제로 컴파일 되었을 때 non-static 함수보다 최적화의 품질이 떨어져 초기화 할때 사용하는 instruction의 개수가 non-static보다 많게 된다.


따라서 캡쳐되는 변수가 안전하고(정적이며, 스레드 세이프) 해당 람다 함수가 여러번 혹은 지속적으로 호출된다면
static으로 선언하고, 안전하지 않거나 호출 횟수가 적은 경우에는 non-static으로 선언하는 것이 좋다.

 

다만 캡쳐 있는 static lambda는 해당 변수가 안전한지 안전하지 않은지를 프로그래머의 판단에 맡기는 위험성이 있기 때문에 웬만하면 사용을 피해야 한다.

 

참고자료

https://www.reddit.com/r/cpp_questions/comments/wxa2oa/should_named_lambdas_be_made_static/
https://stackoverflow.com/questions/34011065/lambda-construction-performance-and-static-lambda

'Computer Engineering' 카테고리의 다른 글

소스 코드와 코드베이스의 차이  (0) 2024.06.14
Language Server  (0) 2024.01.16
Sementics Versioning  (0) 2022.08.25
라이브러리와 프레임워크의 차이  (0) 2022.07.30
iNES 2.0의 하위 호환성  (0) 2022.07.29