[patch] const_cast to be replaced by str_unconst
- From: Roland Illig <roland illig gmx de>
- To: MC Devel <mc-devel gnome org>
- Subject: [patch] const_cast to be replaced by str_unconst
- Date: Tue, 12 Apr 2005 12:47:27 +0200
Hi all,
I'd like to introduce a new function:
char *str_unconst(const char *);
The function returns a string that compares equal to its argument, but
does not have the "const" qualifier. Currently it just returns its
argument, cast to (char *).
I like this version much more than the const_cast macro I introduced
some months ago. Compare these:
ms = const_cast(char *, cs);
ms = str_unconst(cs);
The latter is shorter, has fewer chances for typing errors and is not as
powerful as the former. You could have passed an int (or any other
value) before, and that had been converted (or promoted, or whatever
that type cast means in that case) to a char *. That took an important
possibility to check for bugs from the compiler.
There's also the naming issue. Apparently, Bjarne Stroustrup has not had
enough letters to name the const_cast unconst_cast, which would be more
appropriate. The current name is just misleading, so I want to abandon it.
For those of you that are concerned about the performance loss of an
extra function call: It is much more important for the code to be
readable and checkable by the compiler than to be 1 millisecond faster
at all.
Roland
Index: src/util.h
===================================================================
RCS file: /cvsroot/mc/mc/src/util.h,v
retrieving revision 1.66
diff -u -p -r1.66 util.h
--- src/util.h 8 Feb 2005 10:46:01 -0000 1.66
+++ src/util.h 12 Apr 2005 10:33:49 -0000
@@ -3,6 +3,12 @@
#include <sys/types.h>
+/* Returns its argument as a "modifiable" string. This function is
+ * intended to pass strings to legacy libraries that don't know yet
+ * about the "const" modifier. The return value of this function
+ * MUST NOT be modified. */
+extern char *str_unconst (const char *);
+
/* String managing functions */
extern const char *cstrcasestr (const char *haystack, const char *needle);
Index: src/util.c
===================================================================
RCS file: /cvsroot/mc/mc/src/util.c,v
retrieving revision 1.125
diff -u -p -r1.125 util.c
--- src/util.c 23 Mar 2005 05:29:06 -0000 1.125
+++ src/util.c 12 Apr 2005 10:33:47 -0000
@@ -1441,3 +1441,9 @@ cstrcasestr (const char *haystack, const
}
return NULL;
}
+
+extern char *
+str_unconst (const char *s)
+{
+ return (char *) s;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]