微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

知道Visual Studio上正在运行哪个C ++版本

如何解决知道Visual Studio上正在运行哪个C ++版本

我试图在Visual Studio上为我的项目设置c ++ 11,并找出认情况下编译器使用的版本,我使用了以下代码

#include <iostream>

int main(){
        #if __cplusplus==201402L
        std::cout << "C++14" << std::endl;
        #elif __cplusplus==201103L
        std::cout << "C++11" << std::endl;
        #elif __cplusplus==199711L
        std::cout << "C++" << std::endl;
        #elif __cplusplus==201703L
        std::cout << "C++17" << std::endl;
        #elif __cplusplus==1
        std::cout << "C+" << std::endl;
        #endif

        int* i = nullptr;

        return 0;
}

具有输出c ++(98),我试图通过CMakeLists强制编译器使用c ++ 11,如下所示:

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_required ON)
set(CMAKE_CXX_EXTENSIONS OFF)

输出始终为C ++(98),所以我添加

int* i = nullptr;

令人惊讶的是,输出仍然是c ++(98),但是该应用程序可以正常工作。如何解释这种“异常”?我如何知道/决定使用哪种标准?

解决方法

根据@paddy提供的问题Visual Studio 2012 __cplusplus and C++ 11,这是MSVC的一个已知错误,因为版本宏设置为C ++ 98。您应该使用 final firestore = FirebaseFirestore.instance; FirebaseAuth auth = FirebaseAuth.instance; Future<String> getPlasticNum() async { final CollectionReference users = firestore.collection('UserNames'); final String uid = auth.currentUser.uid; final result = await users.doc(uid).get(); return result.data()['plastics'].toString(); } 开关进行编译,以将版本宏更改为正确的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。