Sunday, July 8, 2018

c++ - Superiority of unnamed namespace over static?



How are unnamed namespaces superior to the static keyword?



Answer



You're basically referring to the section $7.3.1.1/2 from the C++ Standard,






The use of the static keyword is
deprecated when declaring objects in a
namespace scope; the
unnamed-namespace provides a superior

alternative.




Unnamed namespace is superior to static keyword, primarily because the keyword static applies only to the variables declarations and functions, not to the user-defined types.



The following code is valid in C++



   //legal code
static int sample_function() { /* function body */ }

static int sample_variable;


But this code is NOT valid:



   //illegal code
static class sample_class { /* class body */ };
static struct sample_struct { /* struct body */ };



So the solution is, unnamed-namespace, which is this,



   //legal code
namespace
{
class sample_class { /* class body */ };
struct sample_struct { /* struct body */ };
}



Hope it explains that why unnamed-namespace is superior to static.




Also, note that use of static keyword is deprecated when declaring objects in a namespace scope (as per the Standard).


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...