在Xcode中用C++11编译含auto返回值代码报错的原因排查
关于C++ auto返回类型编译错误的解答
你混淆了C11和C14中auto的不同用法:
- C11里的
auto仅支持变量的类型推导,不能直接用来推导函数返回类型——如果要在C11中实现函数返回类型推导,必须配合尾随返回类型-> decltype(...)。 - 你写的
auto &GetString() const { return m_str1; }这种直接用auto作为函数返回类型、不写尾随返回类型的写法,是C++14才新增的自动返回类型推导特性,这就是Xcode报错的核心原因。
如果要兼容C++11,代码需要改成带尾随返回类型的写法:
class Foo { public: auto& GetString() const -> decltype(m_str1) { return m_str1; } private: std::wstring m_str1; };
另外也可以直接在Xcode的项目设置中,把C语言标准切换到C14或更高版本(比如C++17),原代码就能正常编译。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

