gpt4 book ai didi

c++ - 我可以使用聚合初始值设定项来返回 C++ 中的结构吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:55 25 4
gpt4 key购买 nike

我有一个函数返回一个由两个整数组成的命名结构,如下所示:

struct myStruct {int i; int j;};

myStruct myFunction(int myArg){
switch (myArg) {
case 0: return {1,2};
case 1: return {2,3};
default: return {4,5};
}
}

我希望能够从我的 switch 语句中返回适当初始化的结构。我可以通过声明一个命名结构并初始化它,然后返回命名结构来做到这一点,但是如果我能让编译器像我上面的例子那样为我创建匿名结构会更干净——它不会编译。这可以(合法地)工作吗?或者实现我的目标最简洁的方法是什么?

最佳答案

如果我们查看 draft C++ standard 部分 6.6.3 返回语句 段落 ,这是完全有效的 C++11 代码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 ]

我们可以从 a live example 中看到它可以工作,但在 C++11 之前它不会工作,正如我们可以从这个 live example 中看到的那样。

如果您正在使用 gccclang 并且由于某些原因您不能使用 C++11 您可以选择使用 compound literals作为 C++ 的扩展,尽管它是 C99 的一个特性,我们可以从这个 live example 中看到 gcc 警告:

warning: ISO C++ forbids compound-literals [-Wpedantic]

另一种选择是将构造函数添加到您的结构中:

struct myStruct
{
int i; int j;
myStruct() : i(0), j(0) {} ;
myStruct(int x, int y) : i(x), j(y) {} ;
};

myStruct myFunction(int myArg){
switch (myArg) {
case 0: return myStruct(1,2) ;
case 1: return myStruct(2,3) ;
default: return myStruct(4,5) ;
}
}

关于c++ - 我可以使用聚合初始值设定项来返回 C++ 中的结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229010/

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