URL: https://www.overclockers.at/coding-stuff/c-frage_199839/page_1 - zur Vollversion wechseln!
Hallo an alle,
gestern hatte ein Arbeitskollege ein seltsames Problem, vielleicht kennt sich ja wer von euch mit C++ aus.
Code:#include <iostream> class A {}; class B : public A {}; template<typename T> void f(T) { std::cout << "f(T)" << std::endl; } void f(A*) { std::cout << "f(A*)" << std::endl; } int main() { int x = 42; A a; B b; f(x); f(&a); f(&b); return 0; }
vielleicht diese seite hier: http://www.gotw.ca/publications/mill17.htm
edit: ok, nachdems ichs jetzt mal ausprobiert hab und den gesamten output gesehen hab versteh ich erst was du meinst
also ich kenn den standard nicht, aber für mich machts schon sinn. er schaut sich die A* funktion an und sieht, dass es nicht der gleiche typ ist. dann schaut er sich die T funktion an die eben den gleichen typ hat -> ergo nimmt er die.
das "erstaunliche" verstehe ich nicht ganz. T& wäre ja eine referenz, die wird er nicht nehmen weils nicht passt. die T* zieht er nach wie vor der A* vor.
early-/latebinding issue maybe?
Zitat von icadas "erstaunliche" verstehe ich nicht ganz. T& wäre ja eine referenz, die wird er nicht nehmen weils nicht passt. die T* zieht er nach wie vor der A* vor.
Das gelöst musst du unter Anführungszeichen setzen ...Zitat von thatDas Problem ist also im Prinzip gelöst - aber wer kanns erklären?
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025