What is external linkage and internal linkage?

When you write an implementation file (.cpp, .cxx, etc) your compiler generates a translation unit. This is the source file from your implementation plus all the headers you #included in it. Internal linkage refers to everything only in scope of a translation unit. External linkage refers to things that exist beyond a particular translation unit. … Read more

How do I print a double value with full precision using cout?

You can set the precision directly on std::cout and use the std::fixed format specifier. double d = 3.14159265358979; cout.precision(17); cout << “Pi: ” << fixed << d << endl; You can #include <limits> to get the maximum precision of a float or double. #include <limits> typedef std::numeric_limits< double > dbl; double d = 3.14159265358979; cout.precision(dbl::max_digits10); … Read more

How to get rid of `deprecated conversion from string constant to ‘char*’` warnings in GCC?

Any functions into which you pass string literals “I am a string literal” should use char const * as the type instead of char*. If you’re going to fix something, fix it right. Explanation: You can not use string literals to initialise strings that will be modified, because they are of type const char*. Casting … Read more

Why aren’t variable-length arrays part of the C++ standard?

[*] (Background: I have some experience implementing C and C++ compilers.) Variable-length arrays in C99 were basically a misstep. In order to support VLAs, C99 had to make the following concessions to common sense: sizeof x is no longer always a compile-time constant; the compiler must sometimes generate code to evaluate a sizeof-expression at runtime. … Read more

C++ template typedef

C++11 added alias declarations, which are generalization of typedef, allowing templates: template <size_t N> using Vector = Matrix<N, 1>; The type Vector<3> is equivalent to Matrix<3, 1>. In C++03, the closest approximation was: template <size_t N> struct Vector { typedef Matrix<N, 1> type; }; Here, the type Vector<3>::type is equivalent to Matrix<3, 1>.