2011-12-06 2 views
1

은 내가 C++ 클래스에서이 같은 코드를 작성하는 사람을 보았다다음 코드는 C++에서 문제를 일으킬 수 있습니까?

int foo (int dummy) 
{ 
    this->dummy = dummy; 
} 

은 우리가 문제를 일으킬 것이다, 그런 코드를 사용할까요?

이렇게 컴파일하려고했는데 효과가있는 것 같습니다.

@update

: 나는 이름 dummy에 대해 대부분이 게시하고, this->dummy 내부 변수, 그리고 당신이 return 문을 놓치고있는 것보다 다른 멤버 함수에 완벽하게 괜찮아요

+2

에 할당? –

+0

왜이 문제가 발생합니까? 이것은 일반적인 세터입니다.그러나 IMHO, 나는이 메소드를 무효로 만들 것입니다. 왜냐하면 반환하지 않기 때문입니다. – 0xd

+0

@WagnerVaz, 내 '@ 업데이트'를 참조하십시오, 다른 것들에 대해 더 신경을 썼습니다. – daisy

답변

5

를 일으키는 문제가 있다면. dummy은 멤버 변수를 섀도우하므로 this->을 사용하여 멤버를 참조하십시오.

int foo (int dummy) 
{ 
    this->dummy = dummy; // set member to argument 
    return this->dummy; 
} 

혼란 스럽기 때문에 간단한 세트 기능보다 복잡한 경우에는이 작업을 수행하지 마십시오.

int foo (int dummy) // Bad practise! Rename this param as the function isn't a setter 
{ 
    this->dummy = dummy * 2 + 1; 
    return this->dummy; 
} 
1

그 perse에는 아무런 문제가 없습니다. 더미를 클래스에서 가져 오는 것으로 가정하지만 실제로 매개 변수에서 오는 경우 혼동을 일으킬 수 있습니다.

IMO는 클래스 멤버임을 나타 내기 위해 뭔가를 사용하는 것이 더 좋습니다. 어떤 사람들은 단순히 mDummy, 다른 m_Dummy, 다른 사람들은 dummy_를 사용합니다.

당신이 선호하는 것이 있지만 무엇보다도 당신은 일관성을 가져야합니다.

0

코드가 잘못되었습니다. 이 함수는 int을 반환하는 것으로 정의되지만 return 문은 없습니다. 컴파일러는 이것에 대해서만 경고를 줄 수는 있지만, foo을 호출하는 함수는 유효하지 않은 값을 반환 할 것으로 예상 할 수 있으며, 나쁜 결과가 발생할 수 있습니다.

0

멤버 변수와 같은 이름의 매개 변수를 전달하는 경우이 방법이 필요합니다. 그러나 다른 이름을 사용하여 숨겨진 (구성원) 변수를 피하는 것이 더 좋습니다. 다른 코딩 스타일이 있고, 일부는 dummy_를 사용하고, 일부는 mDummy 또는 다른 방법을 사용하여 멤버 변수의 이름을 지정합니다. 이렇게하면 코드가 덜 혼란 스럽습니다.

-1
  1. 이렇게하면됩니다.
  2. 혼동하지 마십시오! 혼란 스럽습니다!
0

음이 사용에 아무 문제가 없지만, 코드는 같은 INT 기능 :

현재 클래스

더미 변수가 전달 INT에 할당 , 그러나 기억하니을 int를 반환해야 그것들은 다르지만 지금은 똑같은 것을 가리키고 있습니다. 따라서 그것과 다른 이름을 부여하는 것이 좋습니다.

그러나 특정 변수 유형에서는 정밀도가 떨어질 수 있습니다.

#include <stddef.h> 

typedef struct intlist { 
    int size; 
    int i[1]; 
} intlist; 

intlist * 
makeintlist (int size) 
{ 
    intlist *ilp = malloc (offsetof (intlist, i[size])); /* not C++ */ 
    ilp->size = size; 
    return ilp; 
} 

멤버 변수 크기는 왜이 확인되지 않을 것 크기

관련 문제