C++ 直接在类外部调用构造函数是否会隐式创建对象? A类 { 公众: A(){cout

C++ 直接在类外部调用构造函数是否会隐式创建对象? A类 { 公众: A(){cout,c++,object,constructor,C++,Object,Constructor,是。在该行中构造对象的方式: class A { public: A() { cout << "constructor" << endl; }; A(const A &) { cout << "copy constructor" << endl; }; void operator()(int a, int b) { cout << "a+b" << endl; } }; void set(A

是。在该行中构造对象的方式:

class A
{
public:
    A() { cout << "constructor" << endl; };
    A(const A &) { cout << "copy constructor" << endl; };
    void operator()(int a, int b) { cout << "a+b" << endl; }
};
void set(A visit) {
    visit(1, 2);
}
int main()
{
    set(A());
    return 0;
}
被称为函数表示法类型转换。这在CPP标准草案中的章节中有详细说明

构造函数用于初始化其类类型的对象。由于构造函数没有名称,因此在名称查找过程中永远找不到它们;但是,使用函数表示法的显式类型转换将导致调用构造函数初始化对象。[ 注意:语法看起来像构造函数的显式调用- 尾注 ]

set(A());
以这种方式创建的对象未命名


是的。您在线条中构建对象的方式:

class A
{
public:
    A() { cout << "constructor" << endl; };
    A(const A &) { cout << "copy constructor" << endl; };
    void operator()(int a, int b) { cout << "a+b" << endl; }
};
void set(A visit) {
    visit(1, 2);
}
int main()
{
    set(A());
    return 0;
}
被称为函数表示法类型转换。这在CPP标准草案中的章节中有详细说明

构造函数用于初始化其类类型的对象。由于构造函数没有名称,因此在名称查找过程中永远找不到它们;但是,使用函数表示法的显式类型转换将导致调用构造函数初始化对象。[ 注意:语法看起来像构造函数的显式调用- 尾注 ]

set(A());
以这种方式创建的对象未命名


这是反向的。
A()
创建类型为
A
的对象。作为此过程的一部分,此语法调用
A
的构造函数(如果有)。毕竟,您可以执行
int(5)
来创建
int
,但这并不意味着
int
有构造函数(只有用户定义的类型具有实际的构造函数/析构函数)


所以,你并不是在“调用一个碰巧创建了一个对象的构造函数”;而是在“创建一个对象,这可能涉及调用一个构造函数”。

你有这个倒过来的方法。
a()
创建类型为
A
的对象。作为此过程的一部分,此语法调用
A
的构造函数(如果有)。毕竟,您可以执行
int(5)
来创建
int
,但这并不意味着
int
有构造函数(只有用户定义的类型才有实际的构造函数/析构函数)


所以,你并不是在“调用一个碰巧创建了一个对象的构造函数”,而是在“创建一个对象,这可能涉及调用一个构造函数”.

这个例子就是我碰巧看到的,作者可能只是截取了一个片段。因为我看到了直接调用构造函数来创建作为参数传递给函数的对象,所以我以前不知道这个用法,我只是想验证一下我的想法。我很高兴得到大家的帮助。这个例子就是我碰巧看到的作者可能只是截取了一个片段。因为我看到直接调用构造函数来创建作为参数传递给函数的对象,所以我以前不知道这个用法,我只是想验证我的想法。我很高兴得到大家的帮助。