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;
}
相关推荐
|_⊙37 分钟前
Linux 深入理解文件(IO)
linux·运维·服务器
WL_Aurora37 分钟前
Java Scanner输入陷阱深度解析
java·开发语言
2401_8800714039 分钟前
Redis怎样查询集群的整体健康状态_使用cluster info指令查看槽位覆盖率与节点状态
jvm·数据库·python
2301_8159019741 分钟前
Go语言如何写负载均衡器_Go语言负载均衡器实战教程【完整】
jvm·数据库·python
kyle~41 分钟前
Linux时间系统4---从PHC_PTP到ROS 2驱动与控制链路
linux·运维·数码相机
一只大袋鼠42 分钟前
SpringMVC 框架中的拦截器
java·springmvc·javaweb·拦截器
Han_han91942 分钟前
斗地主案例:
java·开发语言
江公望44 分钟前
Qt QRegularExpression正则类,10分钟讲清楚
qt
阿丰资源1 小时前
基于SpringBoot的电影评论网站(含源码)
java·spring boot·后端