В классе argList
конструктор - это инструкция
args_[0] = fileName(argv[0]);
При поиске метода fileName(...)
получается, что он должен быть конструктором класса fileName
:
inline Foam::fileName::fileName(const char* str) //Construct as copy of character array.
: string(str) //Construct as copy of character array.
{
stripInvalid(); //Strip invalid characters from the given string.
}
Два вопроса:
fileName
который вызывается?fileName
статическим, если он был вызван так?Приветствие
Да - это действительно конструктор класса fileName
- нет возвращаемого значения, а имя метода совпадает с именем класса.
Это не вызов конструктора, но определение конструктора (я предполагаю ::
что сбивает с толку вас):
inline Foam::fileName::fileName(const char* str) //Construct as copy of character array.
Это вызов конструктора:
args_[0] = fileName(argv[0]);
В C++ нет статического конструктора.
"1. Это действительно конструктор класса fileName, который вызывается?
Да. Вызывается конструктор, потому что ему args_ [0] присваивается новый экземпляр класса fileName.
"2. Не был ли конструктором fileName статическим, если он был вызван так?
Нет. Конструктор не может быть статическим. Это один из правильных способов построения объектов.
Это действительно конструктор класса
fileName
который вызывается?
Косвенно, да. Для класса T
выражение T(args)
создает временный объект и инициализирует его, вызывая подходящий конструктор для аргументов.
В этом случае этот конструктор соответствует типу аргумента, так что используется.
Разве конструктор
fileName
был статическим, если он был вызван так?
Нет, конструкторы не могут быть объявлены статическими. Они всегда могут использоваться для инициализации либо именованных переменных, либо временных, подобных этому, без специальных объявлений.