Always have two overloaded versions of functions that take char * and const char * parameters. Declare (but don't define if not needed) a function that takes const char* as a parameter when you have defined a function that accepts a non-const char* as a parameter. #include <iostream> #include <iomanip> static void foo (char *s) { std::cout << "non-const " << std::hex << static_cast <void *>(s) << std::endl; } static void foo (char const *s) { std::cout << "const " << std::hex << static_cast <void const *>(s) } int main (void) { char * c1 = "Literal String 1"; char const * c2 = "Literal String 1"; foo (c1); foo (c2); foo ("Literal String 1"); //*c1 = 'l'; // This will cause a seg-fault on Linux. std::cout << c2 << std::endl; return 0; } Because of default conversion rule from string literal to char *, the call to foo using in-pla...
A blog on various topics in C++ programming including language features, standards, idioms, design patterns, functional, and OO programming.