首页 > 解决方案 > 为什么返回一个在普通括号内用大括号初始化的向量会导致编译错误?

问题描述

我刚刚写了一个简单的方法来返回一个由两个 int 参数组成的向量。但是,当我在普通括号内返回初始化的 int 向量时,会导致编译错误。

std::vector<int> getVec(int x, int y)
{
    return({x, y}); // This causes compile error
    return {x, y};  // This is fine
}

错误消息说:

q.cpp: In function ‘std::vector<int> getVec(int, int)’:
q.cpp:8:21: error: expected ‘;’ before ‘}’ token
    8 |         return({x, y});
      |                     ^
      |                     ;
q.cpp:8:15: error: could not convert ‘((void)0, y)’ from ‘int’ to ‘std::vector<int>’
    8 |         return({x, y});
      |               ^~~~~~~~
      |               |
      |               int

标签: c++c++11

解决方案


退货声明

  • 返回表达式(可选);(1)
  • 返回花括号初始化列表;(2)

请记住,{..}不是表达式,没有类型。存在一些允许{..}以某种类型推断的上下文。

(2)有一个特殊情况return {..},使用复制列表初始化来构造函数的返回值。

return ({x, y})中,我们进入(1),{x, y}仍然没有类型,没有特殊情况({..})。所以错误。


推荐阅读