Tag: most vexing parse

Разница между созданием объекта с помощью () или без

я просто столкнулся с проблемой error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’ при попытке скомпилировать простое qt-приложение: #include #include “gui/MainGUIWindow.h” int main( int argc, char** argv ) { QApplication app( argc, argv ); MainGUIWindow myWindow(); myWindow.show(); return app.exec(); } Я решил это, заменив MainGUIWindow myWindow(); от MainGUIWindow myWindow; но […]

Самый неприятный parsing

Я видел код здесь, в Cpp Quiz [Вопрос # 38] #include struct Foo { Foo(int d) : x(d) {} int x; }; int main() { double x = 3.14; Foo f( int(x) ); std::cout << fx << std::endl; return 0; } Там сказано, что этот код плохо сформирован, потому что Foo f( int(x) ); будет […]

механизм вызова конструктора

struct my { my(){ std::cout<<"Default";} my(const my& m){ std::cout<<"Copy";} ~my(){ std::cout<<"Destructor";} }; int main() { my m(); //1 my n(my()); //2 } Ожидаемый результат: 1 ) Default 2 ) Copy Фактический выход: Что случилось с моим пониманием механизма вызова конструктора? Note Я сократил заголовочные файлы для краткости.

Почему C ++ позволяет нам окружать имя переменной в круглых скобках при объявлении переменной?

Например, такая декларация, как: int (x) = 0; Или даже это: int (((x))) = 0; Я наткнулся на это, потому что в моем коде у меня был fragment, похожий на следующий: struct B { }; struct C { C (B *) {} void f () {}; }; int main() { B *y; C (y); } […]

Сложная информация о самом развязном параде

Мой вопрос заключается в том, как следующую строку можно проанализировать как объявление функции: vector v(istream_iterator(cin), istream_iterator()); Я понимаю большинство деталей самого Vexing Parse и почему второй временный iterator можно интерпретировать как тип, который возвращает функцию iteratorа и не принимает аргументов, но то, что я не получаю, – это то, почему первый временный iterator может быть […]

Почему нет вызова конструктору?

Этот код не ведет себя так, как я ожидаю. #include using namespace std; class Class { Class() { cout<<"default constructor called"; } ~Class() { cout<<"destrutor called"; } }; int main() { Class object(); } Я ожидал, что вызывается «конструктор по умолчанию», но я ничего не видел в качестве вывода. В чем проблема?

Самый неприятный синтаксический анализ

Я получил код отсюда . class Timer { public: Timer(); }; class TimeKeeper { public: TimeKeeper(const Timer& t); int get_time() { return 1; } }; int main() { TimeKeeper time_keeper(Timer()); return time_keeper.get_time(); } По внешнему виду он должен получить ошибку компиляции из-за строки: TimeKeeper time_keeper(Timer()); Но это происходит только в том случае, если return time_keeper.get_time(); […]

Конструктор по умолчанию с пустыми скобками

Есть ли веская причина, что пустой набор круглых скобок (скобки) недействителен для вызова конструктора по умолчанию в C ++? MyObject object; // ok – default ctor MyObject object(blah); // ok MyObject object(); // error Кажется, я набираю «()» автоматически каждый раз. Есть ли веская причина, что это запрещено?

Давайте будем гением компьютера.