gpt4 book ai didi

c++ - 这两种转换方式有区别吗?

转载 作者:太空狗 更新时间:2023-10-29 20:51:47 26 4
gpt4 key购买 nike

我必须处理一些我试图破译的高度模板化的代码。

我看到两种不同的结构,我不确定我是否遗漏了什么。这是一些地方使用的这些类型转换的简化示例,以下语句之间有区别吗?

template<typename T, typename S> S my_function(T t) 
{
// version 1:
S s = t
return s;

// version 2:
return S(t);
}

我正在考虑将所有内容更改为一种样式,这两个语句是否 100% 等效?如果不是,有什么区别?

最佳答案

不,它们不是 100% 等效的!

对于简单的情况(c++11 及更高版本),考虑类型为 class S 的 return 语句,那么区别是:

如果 Smove operators然后在返回值时使用它们,否则 copy operators被使用。另请注意,如果这些运算符是私有(private)的或已删除,则版本 1 将无法编译。

对于版本 2 s 创建(使用构造函数或用户定义的运算符)并由于 RVO 直接返回

现在对于复杂的情况,还有其他的事情要考虑;第一个版本使用 copy initialization第二个是 direct initialization .还有user defined operatorsexplicit可以改变行为的关键字。

关于c++ - 这两种转换方式有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48540924/

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