diff --git a/pygccxml/declarations/cpptypes.py b/pygccxml/declarations/cpptypes.py
index <HASH>..<HASH> 100644
--- a/pygccxml/declarations/cpptypes.py
+++ b/pygccxml/declarations/cpptypes.py
@@ -19,6 +19,8 @@ class type_t(object):
         self.cache = algorithms_cache.type_algs_cache_t()
         self._byte_size = 0
         self._byte_align = 0
+        self._decl_string = None
+        self._partial_decl_string = None
 
     def __str__(self):
         res = self.decl_string
@@ -47,11 +49,19 @@ class type_t(object):
 
     @property
     def decl_string(self):
-        return self.build_decl_string()
+        if self._decl_string is None:
+            self._decl_string = self.build_decl_string()
+            return self._decl_string
+        else:
+            return self._decl_string
 
     @property
     def partial_decl_string(self):
-        return self.build_decl_string(False)
+        if self._partial_decl_string is None:
+            self._partial_decl_string = self.build_decl_string(False)
+            return self._partial_decl_string
+        else:
+            return self._partial_decl_string
 
     def _clone_impl(self):
         raise NotImplementedError()
Cache decl_name and partial_dcl_name in type_t

These functions can be called up to <I> times in simple cases.
Performance gain is around 1%