Вот мой кодехЬегп Const по умолчанию построенный объект
#include <iostream>
using namespace std;
class Q
{
public:
Q() { cout << "constructor" << endl; }
};
extern const Q t/*()*/; //A
const Q s/*()*/; //B
int main()
{
const Q t/*()*/;
}
Я ожидаю, что линия с пометкой «А» означает, что я создаю объект т типа Q, чья связь является внешним, и чьи поля не может быть изменен. Создание выполняется конструктором без аргументов, которые я предоставил.
В основном я ожидаю, что локальный объект t типа Q создается таким же образом, хотя его привязка обязательно будет именно этим файлом, и на самом деле его объем и продолжительность будут только для основного.
C++ позволяет мне помещать или не помещать скобки в const Q t/() /; в основном. В глобальной области видимости в строке A я могу поставить или не поставить круглые скобки, и конструктор не будет вызываться ни в одном из способов.
В строке B мне разрешено не помещать скобки, так как в противном случае компилятор будет смущен, если я определяю прототип функции.
Мои вопросы:
Почему я позволил гибкость ставить() или не соответствует // А, учитывая, что в линии // В этой гибкости не существует?
Независимо от моего выбора в 1., я обнаружил, что «конструктор» не печатается линией A, хотя он напечатан в строке B. Почему? На самом деле у меня нет ожиданий. С одной стороны, было бы разумно напечатать его, так как мы видим в основном, что C++ понимает вызов конструктора с 0 аргументами даже без круглых скобок. С другой стороны, если бы это было так, то как я мог бы сделать объявление, не определяющее тип класса?
Ir не совсем очевидно, что вы просите, но этот 'const Q s()' ничего не создает, он объявляет функцию. Поиск здесь и в другом месте для «наиболее неприятного разбора». –
@NeilButterworth Как я могу уточнить, что я прошу? Паренс прокомментирован. Они не будут допущены, как вы и я оба отметили. – Jeff
Им не разрешат. Когда вы публикуете здесь _don't_ пост, прокомментированный код - это просто затрудняет понимание того, о чем вы на самом деле спрашиваете, и требует от нас редактирования кода, если мы хотим его скомпилировать. –