REW

What Programming Language Uses Const?

Published Aug 29, 2025 5 min read
On this page

The programming languages that use the const keyword include C, C++, JavaScript, C#, D, Julia, and Rust, though its specific meaning and behavior can vary significantly between them. In general, const signifies that a value is read-only and cannot be altered after its initial assignment. This helps prevent accidental modifications, improves code readability, and can enable certain compiler optimizations.

Understanding the concept of immutability

At its core, const is a tool for expressing immutability, the property of a value or object that prevents it from being modified. Immutability is a fundamental concept in software engineering that enhances code robustness and predictability. By declaring a value as constant, a programmer communicates to both the compiler and other developers that it should not change, and the compiler enforces this rule by issuing an error if an attempt is made to reassign it.

The specific implementation and enforcement of this concept, however, is not universal and is heavily dependent on the language's design.

const across different languages

C and C++

In the C family of languages, const is a type qualifier, meaning it's part of a variable's data type. This allows for a granular level of control known as "const-correctness."

  • Simple Variables: For a simple integer, const int myNum = 15; prevents the variable myNum from being reassigned.
  • Pointers: The placement of const relative to the asterisk (*) is crucial and can distinguish between several scenarios:
    • const int *ptr; (or int const *ptr;): A pointer to a constant integer. The integer's value cannot be changed via this pointer, but the pointer itself can be reassigned to a different integer.
    • int *const ptr;: A constant pointer to a variable integer. The pointer itself cannot be reassigned, but the integer's value it points to can be modified.
    • const int *const ptr;: A constant pointer to a constant integer. Neither the pointer nor the value it points to can be changed.
  • Member Functions: In C++, a member function can be declared const. This promises the compiler that the function will not modify any of the class's data members. const member functions can be called on const objects, whereas non-const member functions cannot.

JavaScript

Introduced in ECMAScript 2015 (ES6), the const declaration in JavaScript creates a block-scoped variable with an immutable binding. This means the variable identifier cannot be reassigned, but it's important to understand what this implies for different data types.

  • Primitive Types: For primitives like numbers and strings, the value itself is constant.javascript

    const PI = 3.14159;
    PI = 3.0; // Throws a TypeError
    

    Use code with caution.

  • Object and Array Types: The const keyword only prevents the variable's binding from being reassigned, not the contents of the object or array itself. The object or array can still be mutated.javascript

    const myObject = { a: 1 };
    myObject.a = 2; // This is perfectly valid
    myObject = { b: 3 }; // This will throw a TypeError
    

    Use code with caution.

C#

In C#, the const keyword is used for declaring a compile-time constant. This means the value must be a literal or another constant and is embedded directly into the program's code during compilation. const in C# is much simpler and more restrictive than in C++.

public const double PI = 3.14159;

Use code with caution.

For runtime-evaluated constants, C# uses the readonly keyword, which can be initialized in the declaration or a constructor.

D

The D programming language refines the C++ approach to immutability with two keywords: const and immutable.

  • immutable: Designates data that cannot be modified through any reference. It is "deep" or transitive, meaning anything reachable through an immutable object is also immutable.
  • const: Represents a non-mutable view of data. This view can be of either mutable or immutable data. It is also a deep qualifier.

Rust

Rust uses const to declare compile-time constants that are inlined wherever they are used. Unlike let bindings, constants are not guaranteed to have a fixed memory address. They must also be explicitly typed. For data stored at a fixed memory location for the program's lifetime, Rust uses the static keyword.

const GLOBAL_CONSTANT: u32 = 100_000;

Use code with caution.

Rust also uses const fn to mark a function that can be executed at compile time.

The benefits of using const

Utilizing the const keyword, regardless of the language, offers significant advantages for code quality and maintainability.

  • Prevents Accidental Changes: The primary purpose of const is to enforce the programmer's intent. By declaring a variable as constant, you guarantee that its value will not be modified unexpectedly, preventing a large class of bugs.
  • Improves Readability and Self-Documentation: When other developers see a const declaration, they immediately understand that the value is fixed. This provides valuable context and reduces the mental overhead required to understand a piece of code.
  • Enables Compiler Optimizations: Compilers can use the guarantee of immutability to perform certain optimizations. For example, a compiler might place a constant value in read-only memory, which can be more efficient in embedded systems.
  • Supports Functional Programming: The use of immutable data is a cornerstone of functional programming paradigms. Languages like Rust embrace immutability by making it the default for variables (let), while const provides a stronger, compile-time guarantee.

Const vs. final vs. let

Other languages offer similar keywords to express immutability, but with different semantics.

  • Java: The final keyword is used to make a variable a constant, and its use depends on the data type. final primitives are constant values, while final object references cannot be reassigned, but the object itself can be mutated.
  • Swift: The let keyword declares a constant. Like JavaScript's const, let creates an immutable binding. For structs and enums, let makes the value truly immutable. For classes, the reference is constant, but the class's properties can be modified.
  • Python: Python has no built-in syntax for constants. Instead, it relies on a convention of using all-uppercase variable names (PI = 3.14) to signal to other programmers that a value should be treated as a constant.

Summary

The const keyword is a ubiquitous tool for defining unchangeable values in programming, though its exact behavior varies by language. It ranges from a flexible type qualifier in C and C++ to a simple immutable binding in JavaScript and a compile-time constant in C#. Despite these differences, the underlying goal remains consistent: to improve code reliability and clarity by enforcing immutability and communicating a developer's intent.

Enjoyed this article? Share it with a friend.