c++ - 为什么返回一个在普通括号内用大括号初始化的向量会导致编译错误?
问题描述
我刚刚写了一个简单的方法来返回一个由两个 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
解决方案
从退货声明:
- 返回表达式(可选);(1)
- 返回花括号初始化列表;(2)
请记住,{..}
不是表达式,没有类型。存在一些允许{..}
以某种类型推断的上下文。
(2)有一个特殊情况return {..}
,使用复制列表初始化来构造函数的返回值。
在return ({x, y})
中,我们进入(1),{x, y}
仍然没有类型,没有特殊情况({..})
。所以错误。
推荐阅读
- javascript - 如何保护 Firebase 实时数据库免受 chrome 扩展或 Tampermonkey 扩展的影响?
- php - 使用 LIMIT 和 OFFSET 时使用 SQL 获取记录数
- java - Spring Data:使用软删除策略时基于方法的自动查询的默认“未删除”逻辑
- awk - Bash - 按位置/索引在列中拆分文本文件
- javascript - 如何将数组中的字段转换为单个对象
- machine-learning - 为什么门控激活函数(在 Wavenet 中使用)比 ReLU 工作得更好?
- python - Scrapy 中的代理配置
- python - 如果第一个和最后一个元素相等,则完整列表
- java - 如何在 Java 中隐藏枚举值?
- string - 搜索字符串并列出与该字符串匹配的所有句子