Handling default value for int64_t representing an edge in an adjacency matrix I'm writing an adjacency matrix, in this moment I'm trying to figure out how to indicate a default numeric value for an unassigned edge. There is the macro _I64_MAX but it is said that it's a bad practice to use macros. I wish to know if there's other way to assign such value (as a keyword as in the case of nullptr instead of NULL) or if what I'm doing is OK.
Why don't I use 0? Because the distance for an edge which start and end vertex is the same is:
$$e=(v_i,v_i);~~~||e||=0$$
AdjacencyMatrix::AdjacencyMatrix(const SinglyLinkedList &amp;vertices) : vertices_(vertices)
{
    this-&gt;edge_matrix_ = new int64_t *[this-&gt;vertices_.Size()];
    for (size_t i = 0; i &lt; this-&gt;vertices_.Size(); i++)
    {
        this-&gt;edge_matrix_[i] = new int64_t[this-&gt;vertices_.Size()];
        for (size_t j = 0; j &lt; this-&gt;vertices_.Size(); j++)
        {
            this-&gt;edge_matrix_[i][j] = _I64_MAX;
        }
    }
}
Use of macros
In this case, the macro you using is from a library header that was included with your compiler. This header (ultimately limits.h, although &lt;climits&gt; is usually used with C++ code) is also used by C code, so C++ specific language features cannot be used. These are OK to use.
The C++ way of referencing a minimum value for a type is to make use of std::numeric_limits (in the &lt;limits&gt;) header. In your case, you can replace _I64_MAX with std::numeric_limits&lt;int64_t&gt;::min().
Other notes
All of the references to this-&gt; are unnecessary and can be removed from your code. You rarely need to specify this in C++ code (there a few specific cases where it is needed, like for variable name disambiguation or calling a function thru a member function pointer).
The for loop might be able to be rewritten using iterators or the range-for style if this is supported by the SinglyLinkedList type.