VS Code 修改 C++ 标准同时修改错误检测标准

修改C++标准基于使用Code Running拓展

可以看我上一章文章

VS Code 整洁的打印内容到终端https://blog.csdn.net/2301_76542477/article/details/161060041?sharetype=blogdetail&sharerId=161060041&sharerefer=PC&sharesource=2301_76542477&spm=1011.2480.3001.8118

打开用户设置文件,只需要为编译命令添加上执行的C++版本即可
-std=C++23

复制代码
"cpp": " Clear-Host; Set-Location $dir; $exe = \"$fileNameWithoutExt.exe\"; g++ \"$fileName\" -std=c++23 -o $exe; if ($?) { & .\\$exe }",

当你修改完以后你的程序就能正常编译,但是VS Code的红线依然存在

我们还需要修改IntelliSense

按Ctrl + Shift + P 输入命令:C/C++: Log Diagnostics

往上找到Standard Version查看当前使用的标准

当前使用的是C++17这和设置的不一样

打开用户设置添加如下

复制代码
"C_Cpp.default.cppStandard": "c++23",

保存后即可完成修改

完成修改后再次检查一下

没问题即可

错误检查就正常了

最后给个代码试试看,下面的代码是需要C++20,默认的VS Code是运行不了的

如果你配置完后能正常运行并且没有小红线就表示你成功了!

复制代码
#include <iostream>
#include <initializer_list>
#include <stdexcept>
using namespace std;

template <typename T, typename U>
concept Addable = requires(T a, U b) {
    a + b;
};

template <typename T>
concept type = !std::is_same_v<T, float>;  // 排除 float 类型

template <typename T>
requires type<T>
class MyArray {
private:
    T* data;
    size_t size;

public:
    MyArray(size_t n) {
        size = n;
        data = new T[n]{};
    }

    MyArray(initializer_list<T> list) {
        size = list.size();
        data = new T[size];

        size_t i = 0;
        for (auto& val : list) {
            data[i++] = val;
        }
    }

    ~MyArray() {
        delete[] data;
    }

    MyArray(const MyArray& other) {
        size = other.size;
        data = new T[size]{};
        for (size_t i = 0; i < size; i++) {
            data[i] = other.data[i];
        }
    }

    MyArray& operator=(MyArray other) {
        swap(data, other.data);
        swap(size, other.size);
        return *this;
    }

    T& operator[](size_t index) {
        return data[index];
    }

    const T& operator[](size_t index) const {
        return data[index];
    }

    size_t getSize() const {
        return size;
    }
};

template<typename T, typename U>
requires Addable<T, U>
auto operator+(const MyArray<T>& left, const MyArray<U>& right) {
    using ResultType = decltype(left[0] + right[0]);

    size_t n = (left.getSize() < right.getSize()) ? left.getSize() : right.getSize();

    MyArray<ResultType> temp(n);

    for (size_t i = 0; i < n; i++) {
        temp[i] = left[i] + right[i];
    }

    return temp;
}

template<typename T>
ostream& operator<<(ostream& os, const MyArray<T>& arr) {
    os << "[";
    for (size_t i = 0; i < arr.getSize(); i++) {
        os << arr[i];
        if (i + 1 < arr.getSize()) {
            os << ", ";
        }
    }
    os << "]";
    return os;
}

int main() {
    MyArray<int> a = {1, 2, 3};

    cout << "a = " << a << endl;

    return 0;
}
相关推荐
mldong2 小时前
一个 App,十三套后端:手机审批端 uni-jeeflow-app 开源了
java·架构
AlanBruce2 小时前
摩尔信使MThings功能综述与应用使用指南
linux·自动化·plc·mthings·摩尔信使
qq5918406852 小时前
uiautomator2自动化安卓手机操作
python
tqs_123453 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
80s7773 小时前
动态代理和静态代理的区别,动态代理怎么提高网络安全性
python
逆境不可逃3 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
浪子明X3 小时前
十六位账本怎样发现传输差错:Internet Checksum 生活类比
开发语言
尾善爱看海3 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
Flynt4 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet4 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计