2009-07-30 2 views
24

VBScript에 대해 말하는 모든 사이트에서 '&'연산자가 문자열 연결 연산자로 나열됩니다. 그러나 내가 최근에 상속 한 일부 코드에서는 '+'연산자가 사용되는 것을 볼 수 있으며 이로 인해 어떠한 오류도 나타나지 않습니다. 이것은 받아 들여진 대안인가?VBScript의 +와 & 연산자의 차이점은 무엇입니까?

답변

37

+ 연산자가 오버로드되는 반면 & 연산자는 오버로드되지 않습니다. & 연산자는 문자열 연결 만 수행합니다. 일부 서클의 경우 & 연산자는 모호하지 않으므로 오버로드로 인해 의도하지 않은 결과가 발생하지 않으므로 모범 사례로 사용됩니다.

+0

* '+ 연산자가 오버로드되었습니다.'* - * 어떤 의미로 오버로드 되었습니까? – Wolf

+3

VB에서 @wolf + 연산자는 컨텍스트에 따라 더하기와 연결을 모두 수행 할 수 있습니다. –

+1

음, 이미 읽었습니다. 오버로드 된 단어 자체가 너무 많아서 과부하가 되었기 때문에이 시점에서 대답이 조금 더 정확할 수 있습니다. – Wolf

6

+ 문자열이 숫자로 해석 될 수있는 경우 연산자가 역화 될 수 있습니다. 불쾌한 놀라움을 원하지 않으면 &을 사용하여 문자열을 연결하십시오.

27

& 연산자는 문자열 연결을 수행합니다. 즉, 피연산자를 문자열로 변환해야합니다 (예 : CStr을 먼저 호출하는 것과 같습니다). +은 차례로 표현식 중 하나가 숫자 인 경우 강제 추가됩니다. 예를 들어 :

1 + 2 
"1" + 2 
1 + "2" 

당신에게 3을 제공하는 반면

1 & 2 

, 당신에게 12을 제공합니다.

따라서 모호성을 제거하므로 문자열 연결에 &을 사용하는 것이 좋습니다.

+3

문자열 번호 + 번호를 지정하는 경우 +1입니다. 수락 된 대답은 숫자 문자열을 숫자로 변환하는 vbscript에 대해서는 언급하지 않았습니다. – baacke

0

어떤 경우에는 +가 예외를 throw합니다. 예를 들어 다음과 같은 : - COM 개체 소스가 이벤트를 발생 때 예외를 얻을 것이다

Sub SimpleObject_FloatPropertyChanging(fvalue, cancel) 
    'fvalue is a floating point number 
    MsgBox "Received Event: " + fvalue 
End Sub 

는 다음 중 하나를 수행해야합니다

MsgBox "Received Event: " & fvalue 

또는

MsgBox "Received Event: " + CStr(fvalue) 

이 두 경우 모두 CStr(value)을 사용하는 것이 가장 좋습니다. 문자열 연결에 대한 위의 주석 당 &을 사용하는 것은 거의 항상 최선의 방법입니다.

관련 문제