Of these, const is by far the best-known and most used, appearing in the C and C++ standard libraries and encountered in any significant use of these languages, which must satisfy const-correctness.
Properly this is a separate topic, distinct from the type, though const on a variable declaration is also taken to have implications for the storage class, namely that it can be stored in read-only memory.
The qualifier is most often found in code that manipulates hardware directly (such as in embedded systems and device drivers) and in multithreaded applications (though often used incorrectly in that context; see external links at volatile variable).
It can be used in exactly the same manner as const in declarations of variables, pointers, references, and member functions, and in fact, volatile is sometimes used to implement a similar design-by-contract strategy which Andrei Alexandrescu calls volatile-correctness,[4] though this is far less common than const-correctness.
The notion of a type qualifier was introduced, along with the example of readonly (later renamed const) by Bjarne Stroustrup in a Bell Labs internal Technical Memorandum of 1981,[5] and implemented in C with Classes, the predecessor to C++.
The motivation for noalias was complementary to volatile, namely that it indicated that even normally unsafe optimizations could be performed.
Java does not have type qualifiers, and conspicuously omitted const: a 1999 proposal to add it was rejected, notably because adding it after the fact and then changing the standard library to use it consistently would have broken compatibility.