В следуюшем примере код компилируется нормально, но объект класса b не создается (пробовал на Visual studio 10 и на Borland builder 5), что бы это могло значить?
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 ???
Здравствуйте, sergestus, Вы писали:
S>В следуюшем примере код компилируется нормально, но объект класса b не создается (пробовал на Visual studio 10 и на Borland builder 5), что бы это могло значить?
S>b b_(a()); // compiles, but doesn't create a code for this string ???
Это похоже на объявление функции.
Вот так будет работать:
P.S.
Компилятор видит строку "b b_(a());" как объявление функции b_, которая возвращает b, а в качестве
аргумента принимает указатель на функцию с cигнатурой "a()".
Здравствуйте, okman, Вы писали:
O>P.S. O>Компилятор видит строку "b b_(a());" как объявление функции b_, которая возвращает b, а в качестве O>аргумента принимает указатель на функцию с cигнатурой "a()".
Спасибо за разъяснение, компилятор действительно воспринимает строку как прототип функции, вот только почему он интерпретирует a() как а (*)()?
Мне тут подсказали, что компилятор интерпретирует а() как описание функции без имени (потому, что в прототипе функции параметры могут стоять без имени). Хотя и это еще не все, кроме этого копилятор дополнительно преобразует функцию в указатель на функцию... в итоге и получается а (*)().