compare predikat für eine map initialisierung compiliert nicht wenn die argumente const referenzen sind
-
Danke für eure Antworten, sehr hilfreich. Und was ist, wenn ich die Variablen von
get_member()
nicht konstant haben will, weil man sie eben doch ändern kann, aber in dem comparator sollen sie nicht geändert werden, also sollte da
const NamespaceTest& a, ...
stehen. Aber das geht nicht oder?
-
Nein, das geht nicht, denn dann würden ja die Vergleiche, welche die Map durchführt, die Werte in der Map ändern, und die ganze Logik bricht in sich zusammen.
Aber ich bin ziemlich sicher, dass du stattdessen komplett missverstehst, was die const-Qualifizierung an den Funktionen macht.
class X { int get_member() const; };
macht überhaupt keine Aussage über die const'ness der Member von X. Es heißt nur, dass speziell die Funktion
get_member
nichts an den Werten verändern darf.
-
Reine Getter sollten immer konstant sein.
Wenn du doch mal Member innerhalb von konstanten Funktionen ändern willst (z.B. wenn Caching o.ä. benutzt wird), dann kannst du diese als mutable deklarieren.
-
Da muss man aber wirklich, wirklich verstehen, was man tut, bevor man etwas mit
mutable
in einen assoziativen Container wirft. Bloß nicht zuhause nachmachen, bloß um Code zum compilieren zu bekommen, der (zurecht) nicht compilieren will!
-
@fairy2211 sagte in compare predikat für eine map initialisierung compiliert nicht wenn die argumente const referenzen sind:
#include "NamespaceTest.h"
Vertue ich mich, oder ist hier die Konvention "hpp"?
-
@sepe sagte in compare predikat für eine map initialisierung compiliert nicht wenn die argumente const referenzen sind:
@fairy2211 sagte in compare predikat für eine map initialisierung compiliert nicht wenn die argumente const referenzen sind:
#include "NamespaceTest.h"
Vertue ich mich, oder ist hier die Konvention "hpp"?
Wenn du fragst, ob du dich vertust, ist die Antwort doch schon klar, oder?
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rl-file-suffix
-
and it’s easier to name all headers .h instead of having different extensions for just those headers that are intended to be shared with C.
Sorry, aber das ist für mich kein Argument dafür, um unsauber zu arbeiten. Und gewisse C++-Koryphäen widersprechen auch.
Was, wenn ein Architekt sagen würde, jo, eine Hundehütte genügt ja auch und ist einfacher zu bauen? Glaube, das würde keinem gefallen, der keine Hundehütte braucht.
-
@sepe Du hast nach Konvention gefragt. Wenn die C++ Core Guidlines was anderes nutzen ist es unwahrscheinlich, dass das eine Konvention ist, an die man sich halten müsste, oder?
-
@Schlangenmensch sagte in compare predikat für eine map initialisierung compiliert nicht wenn die argumente const referenzen sind:
@sepe Du hast nach Konvention gefragt. Wenn die C++ Core Guidlines was anderes nutzen ist es unwahrscheinlich, dass das eine Konvention ist, an die man sich halten müsste, oder?
Bloß zur Info: sepe ist cyborg_beta, omggg, oder wie er sonst noch so hieß. Damit du nicht zu viel Zeit verschwendest mit gut gemeinten Antworten auf Getrolle.
-
Offenbar gibt es da keine eindeutige Definition/Konvention, an die man sich halten soll.