函数声明而不是在C ++中调用构造函数

时间:2013-08-18 22:16:12

标签: c++ constructor function-declaration temporary-objects

我希望在这里初始化B的对象,但我得到了函数声明:

#include <iostream>
using namespace std;

class A {};

class B { 
    public: 
        B(const A&) { 
        cout << "B: conversion constructor\n"; 
    } 
};

int main()
{
    B b( A() ); //function declaration: B b( A(*)() );
    b.test();
}

输出是:请求'b'中的成员'test',这是非类型'B(A( *)())'*

为什么在这种情况下不调用构造函数?

1 个答案:

答案 0 :(得分:1)

这是解析器认为变量声明是函数声明的许多情况之一,请尝试将其写为:

B b = A() ;  // Now the compiler doesn't think that it's a function declaration