Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sergestus
76 / 76 / 23
Регистрация: 26.10.2011
Сообщений: 212
Завершенные тесты: 1
#1

Странное поведение транслятора - C++

26.10.2011, 10:33. Просмотров 425. Ответов 5
Метки нет (Все метки)

В следуюшем примере код компилируется нормально, но объект класса b не содается (пробывал на Visual studio 10 и на Borland builder 5), что бы это могло значить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct a
{
public:
    a(){}
};
 
 
class b
{
public:
    b(){} 
    b(a a_)
    {
        printf("!!!");
    }
};
 
 
int main(int argc, char* argv[])
{
    b b_(a()); // compiles, but doesn't create a code for this string ???
     
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 10:33     Странное поведение транслятора
Посмотрите здесь:

Странное поведение в коде - C++
Есть два класса: ArrayList<T> и Array<T> (реализация в конце поста). И есть такой код: ArrayList<int> list = { 1, 2, 3 }; ...

Странное поведение присваивания - C++
class Lexem { public: uint id; uint value; uint line; uint pos; bool operator==(int a){ return a...

Странное поведение указателя - C++
Здравствуйте, наткнулся на непонятное мне поведение указателя или точнее менеджера памяти. Есть код: #include <iostream> #include...

Странное поведение компилятора - C++
Всем привет! Я конечно понимаю что нужно выкладывать минимальный код повторяющий мою проблему но он будет достаточно грамосток т.к. в...

Странное поведение программы - C++
Перечитываю Герберт Шилдт: С++ базовый курс. Простая программа: #include <iostream> using namespace std; int main() { ...

Странное поведение программы - C++
Здравствуйте, у меня проблема. В силу какой-то причины результатом вычисления выражения при значениях PA и PB равных 0 и 1 соответственно,...

Странное поведение кода - C++
int x; cout << (x = 1) + (x = 2) + (x = 3); У меня выводит 7 (вместо 6). Почему?!?!

Странное поведение wstring - C++
Всем привет! Ребята, не могу понять такую ситуацию. Вставляю в wstring строку в позицию 0 таким образом ...

Странное поведение указателя - C++
#include <iostream> #include <cstring> int main(){ char line1="hello world!"; char line2="hell word!"; int...

Странное поведение getline - C++
В программе в двух местах используеться getline. В первом случае все супер : string ownerName; getline (cin, ownerName); А во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5464 / 1830 / 338
Регистрация: 10.12.2010
Сообщений: 5,409
Записей в блоге: 3
26.10.2011, 12:11     Странное поведение транслятора #2
Если вы пытались откомпилировать сие в VS, то компилятор навреняка выдал вам warning c4930, говорящий о том, что он рассматривает конструкцию b b_(a()); как прототип функции, поскольку фактическим параметром выступает анонимный класс (не имеет имени). Соответственно, нет инстанцированного объекта в виде параметра.
Варианты борьбы:
1) создать промежуточную переменную
C++
1
2
a temp;
b b_(k);
2) согласно стандарту заключить в дополнительные скобки.
C++
1
b b_((a()));
sergestus
76 / 76 / 23
Регистрация: 26.10.2011
Сообщений: 212
Завершенные тесты: 1
27.10.2011, 16:37  [ТС]     Странное поведение транслятора #3
>>Если вы пытались откомпилировать сие в VS, то компилятор навреняка выдал вам warning c4930, говорящий о том, что он рассматривает конструкцию b b_(a()); как прототип функции, поскольку фактическим параметром выступает анонимный класс (не имеет имени). Соответственно, нет инстанцированного объекта в виде параметра.

Вы совершенно правы, предупрежднние выдается, просто я не обратил внимания. Данная конструкция появилась случайно и я просто решил разобраться в чем проблема. Компилятор действительно воспринимает строку как прототип функции, вот только почему он интерпретирует a() как а (*)()?
HighPredator
5464 / 1830 / 338
Регистрация: 10.12.2010
Сообщений: 5,409
Записей в блоге: 3
27.10.2011, 19:48     Странное поведение транслятора #4
Цитата Сообщение от sergestus Посмотреть сообщение
только почему он интерпретирует a() как а (*)()?
А что-ж это по-вашему?

Добавлено через 1 минуту
У вас же анонимный вызов.
dimcoder
Полярный
453 / 426 / 66
Регистрация: 11.09.2011
Сообщений: 1,128
27.10.2011, 19:56     Странное поведение транслятора #5
Извиняюсь за оффтоп. Тему перепутал
sergestus
76 / 76 / 23
Регистрация: 26.10.2011
Сообщений: 212
Завершенные тесты: 1
28.10.2011, 11:22  [ТС]     Странное поведение транслятора #6
Цитата Сообщение от Predator_2004 Посмотреть сообщение
А что-ж это по-вашему?

Добавлено через 1 минуту
У вас же анонимный вызов.
Мне тут подсказали, что компилятор интерпретирует а() как описание функции без имени (потому, что в прототипе функции параметры могут стоять без имени). Хотя и это еще не все, кроме этого копилятор дополнительно преобразует функцию в указатель на функцию... в итоге и получается а (*)().
Yandex
Объявления
28.10.2011, 11:22     Странное поведение транслятора
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru