Описание тега most-vexing-parse

Термин "наиболее неприятный синтаксический анализ" (введен Скоттом Мейерсом в "Эффективный STL") относится к особой синтаксической двусмысленности в программах на C++, которая приводит к противоречивой интерпретации некоторых объявлений. Это часто сопровождается плохой диагностикой, что сбивает с толку многих программистов, которые с ней сталкиваются.
1 ответ

Ошибка вызова пользовательского оператора + для временного объекта при наличии дополнительных скобок

Если у меня есть пользовательский operator+() как в: class A { public: A operator+(A) { return A(); } }; Тогда следующее работает как ожидалось: A a = A() + A(); но g++-4.7 выдает сообщение об ошибке следующего: A a = (A()) + A(); В частности, сообщ…
20 май '13 в 03:20
5 ответов

Move ctor не вызывается

Я делаю что-то не так (снова)? #include <iostream> using std::cout; struct Map { Map() { cout << "Map()\n"; } Map(const Map& pattern) { cout << "Map(const Map& pattern)\n"; } Map(Map&& tmp) { cout << "Map(Map&…
30 окт '10 в 15:22
3 ответа

Избегайте самого неприятного разбора

Как получить компилятор для создания временных объектов, используя для них конструктор по умолчанию, не определяя функцию? struct B {}; template<class T> struct C {}; template<class T,class T1> struct A { A(const T& t,const T1& t…
06 ноя '12 в 11:07
1 ответ

Ошибка: запрос на член '..' в '..', который не относится к классу

Я использую STL priority_queue и дать пользовательский класс компаратора, конструктор которого принимает указатель на вектор, который хранит приоритеты, таким образом - #include <iostream> #include <queue> // std::priority_queue #include…
1 ответ

Определение лямбда-функции в C++11 не компилируется внутри класса

Я пытался создать лямбда-функцию внутри класса C++, но это дает ошибку компиляции. Код выглядит так: class Test { public: struct V { int a; }; priority_queue<V, vector<V>, function<bool(V&, V&)>> max_heap([](V& a, V&amp…
03 фев '18 в 02:29
2 ответа

g++ отклоняет, clang++ принимает: foo(x)("bar")("baz");

Кто-то спросил на днях, почему что-то компилируется с помощью clang, а не с gcc. Я интуитивно понял, что происходит, и смог помочь человеку, но это заставило меня задуматься - согласно стандарту, какой компилятор был правильным? Вот урезанная версия…
02 фев '15 в 17:22
3 ответа

Проблемы с конструктором C++

Интересно, может ли кто-нибудь помочь с тем, что мне кажется странным в c++ (gcc Последняя версия). Ниже приведен код, который успешно компилируется, и я ожидаю ошибки времени компиляции из-за отсутствия соответствующего конструктора. Кто-нибудь мож…
23 янв '13 в 22:07
4 ответа

Преобразовать время в минуты и секунды

Я сделал код для преобразования времени в минуты и секунды, используя конструктор. В выводе я получаю время в секундах, но оно не отображает время в минутах и ​​не может понять мою ошибку, чтобы кто-нибудь мог мне помочь... #include<iostream> …
15 апр '15 в 07:58
2 ответа

Разница между разбором void() и int()

Прочитав о самом неприятном разборе, я немного поэкспериментировал и нашел эту программу. Есть две очень похожие строки. Один из них выдает предупреждения как в g++7, так и в clang++-3.9, другой - нет. int main() { void(); // no warning int(); // wa…
21 фев '18 в 18:28
1 ответ

Что должны делать скобки в "самом неприятном разборе"?

Мы все знаем, что это самый неприятный анализ: Foo f( Bar() ); Каждый компилятор считает, что это объявление функции. Но я никогда не видел, чтобы кто-нибудь использовал скобки в таком объявлении функции. Что означают эти скобки? Предположим, это бы…
08 янв '17 в 15:18
1 ответ

Перемещение значения в классе

Я просматривал некоторое время в поисках ответа, но, похоже, не нашел его. Поэтому я решил специально задать вопрос здесь. Я пытался использовать что-то вроде этого (и варианты этого): struct NonCopyable { NonCopyable() { }; NonCopyable(const NonCop…
16 окт '17 в 09:35
2 ответа

Понимание компилятора C++

Возможный дубликат: Самый неприятный разбор: почему не A a (()); Работа? У меня возникла эта простая проблема C++, которая заставляет меня снова и снова пытаться возобновить степень CS, пытаясь что-то выучить на этот раз.;) Почему этот код не компил…
0 ответов

C++ инициализация класса с использованием конструктора шаблона, скомпилированного как объявление функции

Мой пользовательский контейнерный класс не может вызывать конструктор при использовании прямой инициализации. Вот мой код #include <iostream> #include <list> template <class T> struct C { T t_; template <class U, class = typenam…
28 дек '18 в 13:41
3 ответа

Почему этот код может исключить копию?

Возможные дубликаты: механизм вызова конструктора Почему ошибочно использовать пустой набор скобок для вызова конструктора без аргументов? Почему этот код может исключить все копии A? #include <iostream> class A { public: A() {} A(const A&…
14 июл '11 в 08:09
2 ответа

В чем разница между этими двумя версиями кода?

Этот код вызывает ошибку компиляции (самый неприятный анализ) #include <iostream> class A { int a; public: A(int x) :a(x) {} }; class B { public: B(const A& obj) { std::cout << "B\n";} void foo() {std::cout << "foo\n";} }; int …
21 фев '19 в 15:46
2 ответа

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

В то время как MyClass m(); это классическая ошибка, так как она не объявляет переменную m, а функцию принимает нулевые аргументы и возвращает MyClass. Тем не менее, я обнаружил, что в Visual Studio следующий оператор создает ту же проблему (кажется…
06 дек '16 в 19:44
2 ответа

В чем смысл этого синтаксиса

Следующий код компилируется. Но если я напишу код для вызова метода test с помощью jar это дает мне ошибку компиляции. Что на самом деле здесь происходит. #include <iostream> using namespace std; class A { public: void test() { cout << "…
01 апр '13 в 22:24
2 ответа

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

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 Фактический вывод: Что не та…
1 ответ

Вызов функции базового класса из объекта производного класса. Члены базового класса, установленные в конструкторе производного класса

Я искал решение проблемы ниже по всему интернету. Некоторые из приведенных решений - именно то, что я делаю, но я все еще получаю ошибку, когда пытаюсь скомпилировать свой код. Любая помощь будет принята с благодарностью. У меня есть базовый класс S…
07 июл '15 в 22:38
2 ответа

Запрос на член, не принадлежащий к классу типа C++

Я стараюсь протестировать каждую функцию в этом классе, и я не могу протестировать функцию, которая назначит числитель и знаменатель для конструктора, который не принимает аргументов, вот мой код. Я получаю этот запрос об ошибке для члена "числитель…
31 янв '14 в 22:14