gpt4 book ai didi

c++ - C++11 标准中的哪个子句允许我在下面的 `A` 中删除 `return` 语句中的 `A::operator-()`?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:15:36 24 4
gpt4 key购买 nike

C++11 标准中的哪个子句允许我消除 A::operator-()< 中 return 语句中的 A/ 下面?换句话说,如果我将表达式 return A{-a.i, -a.j}; 替换为 return {-a.i, -a.j}; 代码编译并正确执行。如果可能的话,我想知道使用标准是如何工作的?

#include <iostream>

struct A {
int i;
int j;
A(int n, int m) : i(n), j(m) {}
};


A operator-(A a) { return A{-a.i, -a.j}; }

int main()
{
A a(1, 2);
A b = -a;
std::cout << b.i << " " << b.j << '\n';
}

最佳答案

6.6.3/2

A return statement with a braced-init-list initializes the object or reference to be returned from the function by copy-list-initialization (8.5.4) from the specified initializer list. [ Example:

    std::pair<std::string,int> f(const char* p, int x) {
return {p,x};
}

— end example ]

关于c++ - C++11 标准中的哪个子句允许我在下面的 `A` 中删除 `return` 语句中的 `A::operator-()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210626/

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