首页 > 解决方案 > C++ 返回类型推导与速记 IF 语句问题

问题描述

为什么在 C++ 中返回类型推导不适用于 short if?

这是示例代码。(编译器 g++-10 v.10.0.1 20200416)

struct Point{
  int x;
  int y;
};

Point test() {
  // In C++20 works
  return {0,1};

  // In C++20 works
  return 1 ? Point{0,0} : Point{1,1};

  // In C++20 don't work
  return 1 ? {0,0} : {1,1};
} 

我认为它在所有情况下都应该有效:) 是否有一些魔法可以强制类型推断?

标签: if-statementg++type-deduction

解决方案


return 语句需要直接返回对象。那就是回报期望一个点。如果它的格式为return {0,1},则将其{0,1}强制转换为指向,但是return 1 ? {0,0} : {1,1},return 语句不能隐式强制转换为指向,因此您必须创建新对象才能返回。例如return 1 ? Point{0,0} : Point{1,1};


推荐阅读