С>>не транслируется, а Ptr3(0) транслируется? Ведь в конструкторе auto_ptr по умолчанию тоже 0 используется.
Z>Потому что обозначает нечто иное — объявление функции Ptr2 с пустым списком формальных параметров, возвращающей auto_ptr<int>.
Если написать, например, такую ф-цию:
void Func(int i=0) {
}
то вызовы Func(0) и Func() эквивалентны.
Почему-же в описанном случае так не происходит? Из-за explicit?
С>>>не транслируется, а Ptr3(0) транслируется? Ведь в конструкторе auto_ptr по умолчанию тоже 0 используется.
Z>>Потому что обозначает нечто иное — объявление функции Ptr2 с пустым списком формальных параметров, возвращающей auto_ptr<int>.
С>Если написать, например, такую ф-цию: С>
С>void Func(int i=0) {
С>}
С>
С>то вызовы Func(0) и Func() эквивалентны. С>Почему-же в описанном случае так не происходит? Из-за explicit?
Потому что в стандарте написано, что в случае лексической неоднозначности "объявление функции — создание объекта" предпочтение отдается форме "объявление функции".
Здравствуйте, m.a.g., Вы писали: MAG>Потому что в стандарте написано, что в случае лексической неоднозначности "объявление функции — создание объекта" предпочтение отдается форме "объявление функции".
Здравствуйте, cpp, Вы писали:
cpp>explicit конструкторы вызываются только при явном задании аргумента.
Разве?
C++ Standard, 12.3.1/2
An explicit constructor constructs objects just like non-explicit constructors, but does so only where the direct-initialization syntax (8.5) or where casts (5.2.9, 5.4) are explicitly used. A default constructor may be an explicit constructor; such a constructor will be used to perform default-initialization (8.5).
Т.е. explicit означает, что данный конструктор не будет использоваться для неявных преобразований.