C++用tuple返回两个值时auto[value1,value2]提示变量需为const是什么原因
问题原因说明
你遇到的报错主要是以下几个原因导致的:
- C标准版本不匹配
你用到的auto [Q, R] = ...语法属于结构化绑定,是C17版本才新增的特性。如果编译时没有开启C17及更高版本的编译选项(例如GCC/Clang不加-std=c++17参数、Visual Studio未在项目属性中设置C标准为C++17以上),编译器无法识别该语法,会抛出各类关联类型错误,其中就包含你遇到的要求Q为常量的提示。 - 运算符函数缺少返回值
你的operator/函数明确声明返回Polynome类型,但你在完成结构化绑定之后没有添加return Q;语句,函数没有合法返回值也会触发编译错误,部分编译器的报错提示会关联返回值的常量性校验,容易误导你认为是Q本身需要声明为常量。 - 入参缺少const限定符
你的division方法和operator/的输入参数D都没有加const限定,而除法运算逻辑本身不会修改除数的取值,正确写法应该声明为const Polynome& D。如果你的代码中存在用常量对象作为除数调用该运算符的场景,也会触发常量性相关的编译错误。
如果需要兼容C++17之前的版本,你可以用std::get读取tuple元素的写法替代结构化绑定,示例如下:
Polynome operator/(const Polynome& D) { std::tuple<Polynome, Polynome> res = division(D); return std::get<0>(res); }
内容的提问来源于stack exchange,提问作者Geoffrey Laforest
相关产品推荐
相关产品推荐

