좋은 글을 참고하여 위 개념을 조금 더 확실하게 이해하였다.
int x = 666;
x는 변수로 l-value, 666은 상수로 r-value (가능)
int *y = &x
y는 변수 l-value, x는 l-value이나, &연산자를 통해서 r-value로 바뀜
(+ & 연산자는 l-value를 r-value로 바꿔주는 연산자이므로, &666은 불가(666이 l-value가 아님))
int setValue()
{
return 6;
}
// ... somewhere in main() ...
setValue() = 3; // error!
함수는 r-value를 return하기 때문에, = 연산자의 왼쪽에 올 수 없음!
int global = 100;
int& setGlobal()
{
return global;
}
// ... somewhere in main() ...
setGlobal() = 400; // OK
함수는 항상 = 연산자의 왼쪽에 올 수 없나? 아님. 함수가 l-value를 return 한다면 이 또한 가능한 사용법
int x = 1;
int y = 3;
int z = x + y; // ok
+는 r-valiue와 r-value를 입력 받고, r-value를 리턴하는데 여기서 x, y는 l-value이지 않는가? 암묵적으로 l-value에서 r-value로 변환된거임
Nope. It's not a technical limitation, though: it's the programming language that has been designed that way.
즉, 여기서 나오는게 l-value 참조임.
(memory location에 대한 정보를 가지고 있는, 존재하는)l-value값을 받고 여기에 접근할 수 있는 변수를 만드는것
int& yref = 10;
따라서 위 코드는 불가능함. 10은 constant로 주소에 대한 정보도 없을 뿐더러, l-value로 존재하지도 않기 때문
const int& ref = 10;
받아들이기 힘들지만, 가능하다. const + l-value 참조를 하면 상수값도 받을 수 있다.
// the following...
const int& ref = 10;
// ... would translate to:
int __internal_unique_name = 10;
const int& ref = __internal_unique_name;
위와 같은 내부 변환 과정을 거쳐 할당되는거임
http{
중략
client_max_body_size 128M;
위와 같이 client_max_body_size 옵션을 통해 웹서버에서 처리할 최대 파일 용량을 설정할 수 있다. default 값은 1M으로 Image를 업로드하기도 작은 수준이었는데, 3M 이미지를 업로드 하다 에러가 생겨 위와 같이 조치하여 해결하였다.