Content deleted Content added
m Remove WP:NOTOC |
→C, C++: (Minimally) incorporate mention to RAII in sentence. |
||
Line 13:
(Called ''automatic'' variables.)
All variables declared within a [[block (programming)|block]] of code are automatic by default. An uninitialized automatic variable has an [[undefined behavior|undefined]] value until it is assigned a valid value of its type. <ref>{{As of|2008|alt=Current}} {{cite web|url= http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf |title=C standard }} {{small|(3.61 [[Mebibyte|MiB]])}}: section 6.2.4, Storage durations of objects</ref> The storage-class specifier <code>auto</code> can be added to these variable declarations as well, but as they are all automatic by default, this is entirely redundant and rarely done.
In C, using the storage class <code>register</code> is a hint to the compiler to cache the variable in a processor register. Other than not allowing the address-of operator (<code>&</code>) to be used on the variable or any of its subcomponents, the compiler is free to ignore the hint.<ref>{{citation|url=https://en.cppreference.com/w/c/language/storage_duration| title=Storage Duration| website=cppreference.com}}</ref>
In [[C++]], the constructor of automatic variables is called when the execution reaches the place of declaration.
Since C++11, C++ allows variables to be declared with the <code>auto</code> type specifier,<ref>{{citation| url=http://en.cppreference.com/w/cpp/language/auto| title=Placeholder type specifiers| website=cppreference.com}}</ref> but this means that the variable's type is [[type inference|inferred]], and does not refer to the scope of the variable.
|