gpt4 book ai didi

c++ - 编译器因 const auto 而崩溃

转载 作者:太空狗 更新时间:2023-10-29 21:02:06 24 4
gpt4 key购买 nike

我正在使用带有 SP1 的 Visual Studio 2010。以下代码使编译器崩溃:

template <typename T>
class MyClass
{
public:
typedef int my_int;

const my_int foo();

};

template <typename T>
const auto MyClass<T>::foo() -> my_int
// auto MyClass<T>::foo() -> const my_int // THIS WORKS!
{
return my_int(1);
}

int main()
{
MyClass<int> m;
m.foo();
}

注意修复问题的注释行。我在这里是否正确使用了 auto(即 auto 上的 const 限定符)?解决方法本质上是完全相同的事情吗(即我可以安全地使用它直到编译器的错误被修复)?最后,我是唯一遇到此问题的人吗?如果不是,我将提交错误报告。

注意:我意识到这里的 const 没什么意义。我试图在一个较小的项目中复制错误,在实际项目中我返回一个对象的 const 引用。

最佳答案

代码在 C++11 中格式错误:如果有尾随返回类型,则“正常”返回类型必须是 auto(C++11 规范在 8.3 .5[dcl.fct]/2 “T 应是单个类型说明符 auto”,其中 T 是“类型”出现在函数名称之前)。

所有编译器崩溃都是编译器错误,所以Visual C++ 2010编译器在编译你的程序时崩溃是一个错误。不过,此错误已得到修复; Visual C++ 2013 拒绝具有正确编译错误的程序。

关于c++ - 编译器因 const auto 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com