gpt4 book ai didi

c++ - 为什么构造函数不调用?

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:46 25 4
gpt4 key购买 nike

我试图检查移动构造函数调用的行为:

#include <iostream>

struct A
{
A(){ std::cout << "A()" << std::endl; };
A(A&){ std::cout << "A(A&)" << std::endl; };
A(A&&){ std::cout << "A(A&&)" << std::endl; };
};

A foo(){
return A();
}

A t(A()); //produce no output, but because of A() is prvalue, I expected A(A&&) was produced
A d(foo()); //OK, produces A()\n A(A&&)\n A(A&&)

int main(){ }

DEMO

你能解释一下这种行为吗?

最佳答案

这个

A t(A()); 

是另一个函数的抽象声明。

是一个函数声明,它具有返回类型 A 和一个类型为 A() 的参数,其中 A() 又是一个函数类型-id.

举个例子

#include <iostream>

int t( int() );
int t( int ( x ) ) { return x; }

int main()
{
std::cout << t( 10 ) << std::endl;
}

这里是 int() 是一个带有函数抽象声明符的 type-id。这是非常

考虑另一个抽象声明符 char[10]。还有带有抽象声明符 [10] 的 type-id。你可以这样写

char ( ( [10] ) )

所以这个

void f( char ( ( [10] ) ) );

是一个有效的函数声明。

如果不使用,您可以省略参数标识符。

关于c++ - 为什么构造函数不调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com