小编Ste*_*enD的帖子

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

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

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};
    }
}
Run Code Online (Sandbox Code Playgroud)

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

c++ struct anonymous return

5
推荐指数
1
解决办法
1627
查看次数

为什么编译器不能从函数参数中推导出我的模板值?

以下内容无法编译:

enum E {A,B,C};
template<E m> 
void foo(E m) {}

int main() {
    foo(A);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

  • 声明'E m':void foo(E m){}:阴影模板parm'E m'
  • 错误:没有用于调用'foo(E)'的匹配函数:foo(A);
  • 候选人是:template void foo(E):void foo(E m){}
  • 模板参数推导/替换失败:无法推导出模板参数'm':foo(A);

我不明白这里到底出了什么问题.为什么编译器不能从函数参数中推导出模板参数?

我需要做些什么来完成这项工作?

c++ templates non-type argument-deduction

2
推荐指数
1
解决办法
598
查看次数

C++标准对缩小从double到int的转换有什么保证?

C++标准对缩小从double到int类型的转换有什么保证?它与Q31328190中解释的Java相同:

c++ standards casting narrowing

1
推荐指数
1
解决办法
72
查看次数