Наше комьюнити:   OpenGL Shader Lab  •  Half-Life FX  •  Форум  
HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4652

Рейтинг



нубовопросы по c++

Неожиданно, возник вопрос про конструкторы по умолчанию. Например, есть структура

C++ Source Code:
struct foo{
foo(){}
foo(int...){}
};
int main () {
    foo x;
    foo y();
    foo z(1);
    cout<<typeid(x).name()<<endl;
    cout<<typeid(y).name()<<endl;
    cout<<typeid(z).name()<<endl;
    return 0;

На выходе имеем
Цитата:
3foo
F3foovE
3foo

или после с++filt
Цитата:
foo
foo ()
foo

Почему записи "foo x" и "foo x()" не эквивалентны и что за такой тип "foo ()"?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 170093

Старое сообщение 20-12-2017 18:37
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28063
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Тип foo() - это функция, возвращающая foo и не принимающая никаких аргументов. Ты же сам её объявил, смотри:

C++ Source Code:
foo x;  // создание экземпляра класса foo с вызовом конструктора по умолчанию
foo y();  // объявление функции y, которая возвращает foo
foo z(1);  // создание экземпляра класса foo с вызовом конструктора foo(int)

Пустые круглые скобки нельзя использовать для вызова конструктора по умолчанию при создании объекта. Тут возникает двусмысленность - и компилятор строго по стандарту её разрешает. Если процитировать стандарт своими словами - то примерно так: "всё, что может быть объявлением функции, должно быть объявлением функции".

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

Сообщить модератору | | IP: Записан
Сообщение: 170097

Старое сообщение 21-12-2017 03:13
-
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4652

Рейтинг



>это функция
действительно. что-то сразу не распарсил.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 170104

Старое сообщение 21-12-2017 07:31
- За что?
ComradeAndrew
C++

Дата регистрации: Aug 2014
Проживает: (void)
Сообщений: 493
Возраст: 21

Рейтинг



C++ Source Code:
foo y();  // объявление функции y, которая возвращает foo


Вот ведь. Никогда об этом не задумывался. Только сейчас дошло. Спасибо

Сообщить модератору | | IP: Записан
Сообщение: 170121

Старое сообщение 21-12-2017 17:56
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21908
Нанёс повреждений: 360 ед.

Рейтинг



А в новых стандартах C++ вот так

C++ Source Code:
std::vector< std::pair< vec_t, int >> foo;


уже можно песать или до сих пор нельзя?

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 170123

Старое сообщение 21-12-2017 18:42
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 2014

Рейтинг



Дядя Миша
В смысле STL-контейнер в STL-контейнере? Я юзал и мысли не было, что так нельзя. Студия 2015 хавала.

C++ Source Code:
std::map<HCP*, std::set<HCP*>> slu;

Сообщить модератору | | IP: Записан
Сообщение: 170125

Старое сообщение 21-12-2017 18:49
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21908
Нанёс повреждений: 360 ед.

Рейтинг



Цитата:
nemyax писал:
В смысле STL-контейнер в STL-контейнере?

нет. Ну Ксер поймет

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 170127

Старое сообщение 21-12-2017 18:52
-
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4652

Рейтинг



>foo y(); // объявление функции y, которая возвращает foo
А не, всё равно не распарсил, это же nested-функция получается а они в стандарте запрещены.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 170130

Старое сообщение 21-12-2017 20:23
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 2014

Рейтинг



thambs
Объявить дадут, а определить нет.

Сообщить модератору | | IP: Записан
Сообщение: 170131

Старое сообщение 21-12-2017 20:32
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28063
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Да, объявлять функции внутри функций вполне можно.
Вот тебе конкретный пример, где это необходимо:

C++ Source Code:
class Bar
{
public:
    Bar() = default;
    void Foo();
};

void Bar::Foo()
{
    Bar foo(); // <---- это не создание объекта класса Bar, но эта строка нужна!
    foo();
    std::cout << "Bar";
}

Bar foo()
{
    std::cout << "Foo";
    return Bar();
}

int main(int argc, char *argv[])
{
    Bar bar;
    bar.Foo();
}


Добавлено 22-12-2017 в 11:58:

Цитата:
Дядя Миша писал:
уже можно песать или до сих пор нельзя?

Да хоть так:
C++ Source Code:
std::vector<std::vector<std::vector<std::pair<int,int>>>> v;

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

Отредактировано XaeroX 22-12-2017 в 03:56

Сообщить модератору | | IP: Записан
Сообщение: 170136

Старое сообщение 22-12-2017 03:58
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21908
Нанёс повреждений: 360 ед.

Рейтинг



Цитата:
XaeroX писал:
Да хоть так:

И компилятор больше не посчитает это битовым сдвигом?

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 170147

Старое сообщение 22-12-2017 13:32
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28063
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Дядя Миша
Ошибка была только в компиляторе MSVC, она давно исправлена, да.

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

Сообщить модератору | | IP: Записан
Сообщение: 170153

Старое сообщение 22-12-2017 16:27
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21908
Нанёс повреждений: 360 ед.

Рейтинг



XaeroX ну что же. Для шестой студии статьи Борескова всё еще актуальны

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 170155

Старое сообщение 22-12-2017 16:49
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28063
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Дядя Миша
Шестая студия - это легенда, о которой рассказывают седые старики. Ну примерно как о том, как видели живого нациста.

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

Сообщить модератору | | IP: Записан
Сообщение: 170158

Старое сообщение 22-12-2017 17:31
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21908
Нанёс повреждений: 360 ед.

Рейтинг



XaeroX как у МаркТвена было написано в каком-то из рассказов, юзая шестую студию, я внезапно начал ощущать дружеские чувства к мумии фараона и желание поболтать с ним на злободневные темы.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 170159

Старое сообщение 22-12-2017 18:15
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 17:09. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Chain Studios © 2005-2018

Рейтинг@Mail.ru