AFAIK это не допустимо, поскольку переменные экземпляра не находятся в области действия в точках, в которых вы их используете.
Подумайте, что бы произошло, если бы перед вашим классом были объявлены следующие переменные:
int mPrice;
char mLabel;
class Product
{ /*...*/ };
В функции decleration mPrice
будет связываться с глобальной переменной, а не с элементом экземпляра.
И g ++ 4.5, и VS10 отказываются компилировать ваш код, поскольку mPrice
и mLabel
находятся вне области действия.
Однако это, похоже, не соответствует параметрам по умолчанию.
int mPrice = 3;
class Product
{ // ...
int foo(int i = mPrice) { return i; }
};
Product p(5.3, "hi");
std::cout << p.foo();
Это дает мне ошибку компиляции:
недопустимое использование элемента нестатических данных 'Product :: mPrice'