Blödes Warning bei std::copy
-
Ich benutze in meinem Code copy:
copy(points, points+8, target);(points ist ein Array: Vector3 points[8]). Leider gibt das dieses Warning (VS2010):
'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1> d:\microsoft visual studio 10.0\vc\include\xutility(2212) : see declaration of 'std::_Copy_impl'Was soll dieses Warning? Wie krieg ich das weg?
-
Nutze STD-Container...
-
Erstens: Was ist eigentlich "target"? Und bist du sicher, daß dort genügend Platz für die Kopie ist?
Zweitens: Die Fehlermeldung beschreibt doch auch, wie du sie abschalten kannst:To disable this warning, use -D_SCL_SECURE_NO_WARNINGS.
Drittens: Ich denke, jetzt wäre es eine gute Idee, über STL-Container (std::vector<>, std::tr1::array<>) nachzudenken.
-
CStoll schrieb:
Erstens: Was ist eigentlich "target"? Und bist du sicher, daß dort genügend Platz für die Kopie ist?
target ist ebenfalls ein Vector3 Array:
Vector3 points[8];Die Arrays haben exakt die selbe Größe. Was soll dieses doofe Warning? Is doch total paranoid.
CStoll schrieb:
Zweitens: Die Fehlermeldung beschreibt doch auch, wie du sie abschalten kannst:
To disable this warning, use -D_SCL_SECURE_NO_WARNINGS.
Drittens: Ich denke,
Ja klar. Hatte nur die Befürchtung, dass ich dann vielleicht andere sinnvolle Warnings unterdrücke. Einen vector oder sowas nehm ich nicht, da der Overhead unerwünscht ist.
-
warnerBros schrieb:
Einen vector oder sowas nehm ich nicht, da der Overhead unerwünscht ist.
Dann nimm
std::tr1::arrayund wenn du Technical Review 1 nicht hast, dannboost::array.
-
Was für einen technischen Overhead hat vector denn?
-
Eisflamme schrieb:
Was für einen technischen Overhead hat vector denn?
Heap Allokationen.
-
Achso, in Ordnung.
-
Ich würde auch das Klassentemplate
std::arraynehmen. Ist im Release-Modus genauso schnell wie ein rohes Array, aber hat im Debug-Modus nützliche Index- und Iteratorchecks. Ausserdem hat die Klasse im Gegensatz zu Arrays Kopiersemantik, keine implizite Konvertierung zu Zeigern und ein STL-Interface (z.B.size()-Methode). Äusserst praktisch. Im Prinzip spricht in modernem C++ nichts dafür, noch rohe Arrays zu verwenden.Hm, ist nun mindestens das vierte Mal innerhalb kurzer Zeit, wo ich diese Empfehlung ausspreche...

-
Ok, ich habe mir gerade std::array angeschaut und finde das Ding eigentlich ganz angenehm. Bin jetzt umgestiegen auf std::array^^
Eine Frage dazu: Was ist die beste Methode um ein std::array in einen std::vector zu kopieren?
-
std::vector<T> v(array.begin(), array.end());
-
Oder falls der
std::vectorschon besteht, kannst duassign()verwenden. Oderinsert(), falls vorherige Elemente erhalten bleiben sollen.