你理解错了。
首先:
T x = T(T(f()));
在语义上完全等价于:
T x(T(f()));
然后f()到T(f())到T x(T(f()));
这三层都因为guaranteed copy elision而变成只有一次调用。
guaranteed copy elision是C++17才完全发展到位的概念。
语义等价这事在C++11之前已经是这样了。
【 在 MyWorkLife (我是谁) 的大作中提到: 】
: 标 题: Re: 同事的C++代码
: 发信站: 水木社区 (Wed Oct 21 20:26:53 2020), 站内
:
: 你对标准的熟悉程度有待提高啊
:
https://en.cppreference.com/w/cpp/language/copy_elision:
: Under the following circumstances, the compilers are required to omit the copy and move construction of class objects, even if the copy/move constructor and the destructor have observable side-effects.
: - In the initialization of an object, when the initializer expression is a prv
: alue of the same class type (ignoring cv-qualification) as the variable type
: :
:
: T x = T(T(f())); // only one call to default constructor of T, to initialize
: x
:
:
: 【 在 here080 (hero080) 的大作中提到: 】
: : 标 题: Re: 同事的C++代码
: : 发信站: 水木社区 (Wed Oct 21 18:42:58 2020), 站内
: :
: : 不是。
: : 这就是定义成显式调用ctor,跟X x(...);语义上完全等价。
: : 【 在 MyWorkLife (我是谁) 的大作中提到: 】
: : : 标 题: Re: 同事的C++代码
: : : 发信站: 水木社区 (Wed Oct 21 18:02:43 2020), 站内
: : :
: : : X x = X(...);
: : : 这种不是copy elision?
: : :
: : : 【 在 here080 (hero080) 的大作中提到: 】
: : : : 标 题: Re: 同事的C++代码
: : : : 发信站: 水木社区 (Wed Oct 21 03:27:23 2020), 站内
: : : :
: : : : 这个不是copy elision,这个就是调用ctor
: : : : 【 在 MyWorkLife (我是谁) 的大作中提到: 】
: : : : : 标 题: Re: 同事的C++代码
: : : : : 发信站: 水木社区 (Tue Oct 20 14:05:50 2020), 站内
: : : : :
: : : : : 这种情况会做copy elision优化
: : : : : 不会调copy ctor
: : : : :
: : : : : 【 在 fanci (大葡萄) 的大作中提到: 】
: : : : : : 标 题: Re: 同事的C++代码
: : : : : : 发信站: 水木社区 (Tue Oct 20 13:02:13 2020), 站内
: : : : : :
: : : : : : 多了一个拷贝构造,这倒罢了,有据可循,X还是X::X 就是个风格问题
: : : : : :
: : : : : : 【 在 here080 () 的大作中提到: 】
: : : : : : : 我刚开始写C++时也喜欢写X x = X(...);
: : : : : : : 【 在 lushan5436 (密如) 的大作中提到: 】
: : : : : : --
: : : : : : 发自xsmth (iOS版)
: : : : : : --
: : : : : :
: : : : : : ※ 来源:·水木社区
http://m.newsmth.net·[FROM: 203.145.95.*]
: : : : :
: : : : :
: : : : : --
: : : : :
: : : : : ※ 来源:·水木社区 newsmth.net·[FROM: 111.200.53.*]
: : : :
: : : :
: : : : --
: : : :
: : : : ※ 来源:·水木社区 newsmth.net·[FROM: 76.126.252.*]
: : :
: : :
: : : --
: : :
: : : ※ 来源:·水木社区 newsmth.net·[FROM: 111.200.53.*]
: :
: :
: : --
: :
: : ※ 来源:·水木社区 newsmth.net·[FROM: 76.126.252.*]
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 111.200.53.*]
--
FROM 76.126.252.*