Господа, почему компилируется следующий код?
class Stuff
{
const int x = new int();
}
Ведь в спецификации мы имеем следующее:
7.15 Constant expressions
..................
. The following constructs are permitted in constant expressions:
· Literals (including the null literal).
· References to const members of class and struct types.
· References to members of enumeration types.
· Parenthesized sub-expressions, which are themselves constant expressions.
· Cast expressions, provided the target type is one of the types listed above.
· The predefined +, –, !, and ~ unary operators.
· The predefined +, –, *, /, %, <<, >>, &, |, ^, &&, ||, ==, !=, <, >, <=, and >= binary operators, provided each operand is of a type listed above.
· The ?: conditional operator.
The following conversions are permitted in constant expressions:
· Identity conversions
· Numeric conversions
· Enumeration conversions
· Constant expression conversions
· Implicit and explicit reference conversions, provided that the source of the conversions is a constant expression that evaluates to the null value.
Other conversions including boxing, unboxing and implicit reference conversions of non-null values are not permitted in constant expressions.
Здравствуйте, nikov, Вы писали:
получается, что выражение new int() на этапе компиляции заменяется на default(int) (0), исходя из
14.5.10.1 Object creation expressions
<skipped>
The compile-time processing of an object-creation-expression of the form new T(A), where T is a classtype,
a value-type, or a type-parameter, and A is an optional argument-list, consists of the following steps:
• If T is a value-type and A is not present:
o The object-creation-expression is a default constructor invocation. The result of the object-creation expression
is a value of type T, namely the default value for T as defined in §11.1.2.
то есть const int i = new int() эквивалентно выражению const int i = 0, которое в этом случае допустимо
А ты переведи, то что сам сюда запостил. Тогда поймешь.
Две капли морфия облегчат тебе жизнь.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение