gpt4 book ai didi

c++ - 默认构造函数的好奇心

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:15 24 4
gpt4 key购买 nike

同时

MyClass m();

是一个典型的陷阱,因为它没有声明变量 m,而是声明一个采用零参数并返回 MyClass 的函数。但是,我发现在 Visual Studio 中,以下语句会产生相同的问题(它似乎以某种方式折叠为上述语句):

MyClass m( MyClass() );

谁能解释这种行为?

注意:预期的更“明确”的版本会做正确的事情(即调用默认值,然后调用移动构造函数)。

MyClass m( std::move( MyClass() ) );

最佳答案

这是最令人烦恼的解析问题。

MyClass m( MyClass() );

这一行被解析为一个名为 m 的函数,它返回类型为 MyClass 的对象并接受一个参数,该参数是一个指向函数的指针,没有参数,返回值为输入MyClass

这里:

MyClass m( std::move( MyClass() ) );

std::move 帮助编译器按预期解析该行。

关于c++ - 默认构造函数的好奇心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41003549/

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