드로다운 값이 최적화 테이블에 어떻게 표시되는지 이상합니다. 수단에 의한 최대 감소가 표시됩니다(그러나 백분율로 작성됨). 그리고 단일 테스트 후에 상대 감소가 최대값과 다른 것으로 나타났습니다(백분율은 더 크거나 작음). 자금 관리를 사용할 때 원하는 결과를 표시하기 위해 무언가를 추가해야 합니까?
template < typename T>
void f( T, const T ) {}
class A {};
voidOnStart ()
{
A * const a = new A;
f( a, a ); //error: 'a' - cannot convert from const pointer to nonconst pointer
}
template < typename T>
struct B {
void f( T, const T ) {}
};
class A {};
voidOnStart ()
{
const A* a;
B< const A*> b;
b.f( a, a ); //нормально
}
그래서 괜찮습니다. 근본적으로 달라진 점은 무엇입니까?
template < typename T>
void f( T, const T ) {}
class A {};
voidOnStart ()
{
const A *a;
f( a, a ); //error: 'a' - cannot convert from const pointer to nonconst pointer
}
두 옵션을 모두 컴파일해야 하는 이유는 무엇입니까?
일반적으로 템플릿을 거의 사용하지 않습니다. 자세한 내용은 다루지 않았습니다. 직관적인 수준에서만 설명할 수 있습니다.
두 번째 경우에 T를 A *로 직접 교체하면 정상적으로 컴파일됩니다. 이는 템플릿이 컴파일되어야 함을 의미합니다.
첫 번째 경우에는 직접 교체가 작동하지 않지만 중복 T2 매개변수를 추가할 수 있습니다. 이 매개변수와 함께 정상적으로 컴파일됩니다. 이는 매개변수가 없어야 함을 의미합니다. 이것이 중복되는 이유입니다.
직관적으로 const는 유형의 일부이고 때로는 식별자일 뿐이므로 함수 내부에서 포인터는 const가 됩니다.
이것은 Print (__FUNCSIG__)를 통해 느낄 수 있습니다.
컴파일 중 오류
따라서 원래 버전은 컴파일되지 않아야 합니다.
왜요?
그래서 괜찮습니다. 근본적으로 달라진 점은 무엇입니까?
근본적으로 달라진 점은 무엇입니까?
차이가 큽니다! 여기 당신이 부른 것입니다
컴파일러는 템플릿의 필요한 올바른 버전을 추측할 수 없다는 점에서 버그가 있습니다. 분명히 그에게 말했다그리고 모든 것이 효과가 있었습니다.
그리고 모든 것이 효과가 있었습니다.
왜 추가 문자?
왜 추가 문자?
컴파일러가 템플릿의 완전히 작동하는 버전을 추측하지 않는다는 것을 보여줍니다.
컴파일러가 템플릿의 완전히 작동하는 버전을 추측하지 않는다는 것을 보여줍니다.
무엇 때문에? ServiceDesk는 스스로 알아낼 수 있습니다.
왜요?