보시다시피 + 연산자는 두 번째 경우에 접착으로 대체되지 않았습니다(리터럴에 대해 생성된 후 런타임 추가가 뒤따름). 프로그래머가 너무 많은 가능성을 가지고 있기 때문에 컴파일러는 단순히 그것을 잘라낼 수 없습니다. 이것은 최적화 가능성을 크게 제한합니다. 이것은 물론 ML이 아니며 모든 것이 다를 수 있지만 "일반 컴파일러가 모든 것을 수행합니다"라는 바로 그 진술은 잘못된 것입니다.
나는 시간과 돈을 낭비하는 것을 주저했습니다. 최적화 프로그램은 마지막 패스에서 멈춥니다. 에이전트는 아무 것도 하지 않으며 모든 것이 승인된 단계에 있습니다. 잡지의 침묵. 최적화 를 다시 시작한 후 모든 것이 처음부터 시작되므로 에이전트를 활성화/비활성화하는 것은 의미가 없습니다.
StringToInteger() 함수를 사용하여 문자열을 숫자로 변환 하려고 할 때 문자열에 숫자가 포함되어 있지 않으면 오류 없이 0이 반환됩니다(GetLastError() = 0). 입력 매개변수에 문자열이 표시되고 사용자가 값을 잘못 지정한 경우 함수는 잘못된 값을 반환하고 오류를 생성하지 않습니다. 이것은 나쁘다.
또한 문자열에 잘못된 숫자 표현이 포함되어 있는 경우(예: 50 대신 50) - 함수는 오류 없이 값 5를 다시 반환합니다. 그리고 여기에서는 0이 아닐 뿐만 아니라 함수가 문자열을 5로 구문 분석했는데, 이는 다시 정확하지 않습니다.
개발자 여러분, 오류 코드를 추가하여 기능을 개선하거나, 파싱이 불가능한 경우 LONG_MAX 값 + 오류를 반환하여 무엇이 잘못되었는지 확인할 수 있도록 기능을 개선하십시오. 이제 이것은 불가능합니다.
이것은 벙어리 컴파일러에서만 가능합니다. 당신 자신이 모든 것을 이해합니다.
using namespace std;
struct S
{
S operator +( const S&) {cout << "operator +\n" ; return S{};}
};
S operator "" _s( const char *, size_t) {cout << "literal operator\n" ; return S{};}
int main()
{
cout << "___literal concatenation example___\n" ;
S s = "sd" _s "sf" _s;
cout << "___operator+ example___\n" ;
S s2 = "sd" _s + "sf" _s;
}
____리터럴 연결 예__
리터럴 연산자
___연산자 + 예시___
리터럴 연산자
리터럴 연산자
연산자 +
보시다시피 + 연산자는 두 번째 경우에 접착으로 대체되지 않았습니다(리터럴에 대해 생성된 후 런타임 추가가 뒤따름). 프로그래머가 너무 많은 가능성을 가지고 있기 때문에 컴파일러는 단순히 그것을 잘라낼 수 없습니다. 이것은 최적화 가능성을 크게 제한합니다. 이것은 물론 ML이 아니며 모든 것이 다를 수 있지만 "일반 컴파일러가 모든 것을 수행합니다"라는 바로 그 진술은 잘못된 것입니다.이것은 물론 ML이 아니며 모든 것이 다를 수 있지만 "일반 컴파일러가 모든 것을 수행합니다"라는 바로 그 진술은 잘못된 것입니다.
나는 시간과 돈을 낭비하는 것을 주저했습니다. 최적화 프로그램은 마지막 패스에서 멈춥니다. 에이전트는 아무 것도 하지 않으며 모든 것이 승인된 단계에 있습니다. 잡지의 침묵. 최적화 를 다시 시작한 후 모든 것이 처음부터 시작되므로 에이전트를 활성화/비활성화하는 것은 의미가 없습니다.
누가 직면했습니까? 싸우는 방법?
마법의 끈
화면 해상도가 1024x768인 MetaEditor\1495의 작업 순서:
- 첨부파일 열기
- 수평 스크롤 슬라이더를 오른쪽으로 끝까지 이동하십시오(그림과 같이).
- 세 번째 줄에서 마우스로 조각 / * 12345 * /를 선택합니다.
추가 설정: 도구\설정\일반\탭 4자StringToInteger() 함수를 사용하여 문자열을 숫자로 변환 하려고 할 때 문자열에 숫자가 포함되어 있지 않으면 오류 없이 0이 반환됩니다(GetLastError() = 0). 입력 매개변수에 문자열이 표시되고 사용자가 값을 잘못 지정한 경우 함수는 잘못된 값을 반환하고 오류를 생성하지 않습니다. 이것은 나쁘다.
또한 문자열에 잘못된 숫자 표현이 포함되어 있는 경우(예: 50 대신 50) - 함수는 오류 없이 값 5를 다시 반환합니다. 그리고 여기에서는 0이 아닐 뿐만 아니라 함수가 문자열을 5로 구문 분석했는데, 이는 다시 정확하지 않습니다.
개발자 여러분, 오류 코드를 추가하여 기능을 개선하거나, 파싱이 불가능한 경우 LONG_MAX 값 + 오류를 반환하여 무엇이 잘못되었는지 확인할 수 있도록 기능을 개선하십시오. 이제 이것은 불가능합니다.
스크립트 코드 확인:
#property script_show_inputs
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
input string value= "05" ;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
const long iValue= StringToInteger (value);
Print ( "iValue = " ,iValue, ", lastError = " , GetLastError ());
}
//+------------------------------------------------------------------+
기능 버전을 구현하십시오 - 10분 이상 걸리지 않습니다.
우리는 시스템 기능의 동작을 변경하지 않을 것입니다.
기능 버전을 구현하십시오 - 10분 이상 걸리지 않습니다.
우리는 시스템 기능의 동작을 변경하지 않을 것입니다.
저것들. 기능, 특히 분명히 거짓말을 할 수 있는 기능에 대한 개선이 필요하다고 생각하지 않습니까?
방금 오류 코드 를 추가했더라도 이미 좋을 것입니다. 그렇지 않으면 바퀴를 재발명할 것을 제안합니다. 물론 어렵지는 않지만 자전거입니다.
저것들. 기능, 특히 분명히 거짓말을 할 수 있는 기능에 대한 개선이 필요하다고 생각하지 않습니까?
방금 오류 코드 를 추가했더라도 이미 좋을 것입니다. 그렇지 않으면 바퀴를 재발명할 것을 제안합니다. 물론 어렵지는 않지만 자전거입니다.
컴파일 중 오류
struct S {};