__cplusplus注意事项

2024-04-27 16:58
文章标签 注意事项 cplusplus

本文主要是介绍__cplusplus注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

__cplusplus注意事项

__cplusplus是C++编译器内部定义的宏,用于定义c++编译器的版本,一般开发人员用此宏判断是c程序还是c++程序,除此外,不清楚__cplusplus的其余用途,其实C++11中,__clpusplus则被定义为201103L,c++14中,则被定义成201402L,这些值在系统 头文件中有用到,下面举个例子:

decay_t是个类型,c++14中定义,位于头文件type_traits中,笔者最近在做qt的国产化,将qt的工程从windows下迁移到linux下,结果linux下就是编译不过,报decay_t不存在,由于工程量巨大,怕是头文件引用顺序不对导致,笔者心中不甚惶恐,为此笔者单独写个小程序,里面有使用decay_t,如下所示(文件名叫decay.cpp,笔者的gcc版本是8.3.0):

#include <stdlib.h>#include <iostream>
#include <tuple>template<class _Fn>
void MyPrint(_Fn data1)
{typedef std::tuple<std::decay_t<_Fn>, std::decay_t<_Fn>> TupType;TupType a;
}using namespace std;int main(int argc, char* argv[])
{int a = 1;MyPrint<int>(a);return 0;
}

结果编译良好,为此寡人稍微心安了些,接着我用g++ -E decay.cpp -o decay.i进行预编译处理,截图如下

图一在这里插入图片描述

可以看到decay_t有定义,同理,我在国产化项目中,也进行预编译处理,结果无decay_t定义,截图一段如下:
图二在这里插入图片描述

图二红色方框的部分在图一中也能找到,但是红色方框下面就不同了,于是到头文件type_traits查看红色方框附近内容,如下图所示:
在这里插入图片描述
可以看到有个#if __cplusplus >= 201402L的判断,则判断工程中__cplusplus小于201402导致,后面检查编译选项,看到了下面的一段:
mips64el-linux-gnuabi64-g++ -w -c -pipe -g -std=gnu++11
其中gnu++11表示c++11,对应的值是201103,为此问题解决了。

如果想查看当前__cplusplus的值,可以用下面的程序打印:

#include<iostream>
using namespace std;
int main(){cout<<__cplusplus<<endl;return 0;
}

这篇关于__cplusplus注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941038

相关文章

Python中__new__()方法适应及注意事项详解

《Python中__new__()方法适应及注意事项详解》:本文主要介绍Python中__new__()方法适应及注意事项的相关资料,new()方法是Python中的一个特殊构造方法,用于在创建对... 目录前言基本用法返回值单例模式自定义对象创建注意事项总结前言new() 方法在 python 中是一个

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Idea调用WebService的关键步骤和注意事项

《Idea调用WebService的关键步骤和注意事项》:本文主要介绍如何在Idea中调用WebService,包括理解WebService的基本概念、获取WSDL文件、阅读和理解WSDL文件、选... 目录前言一、理解WebService的基本概念二、获取WSDL文件三、阅读和理解WSDL文件四、选择对接

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

Vue项目开发各种注意事项

1、eCharts引入方式(单页面) import * as echarts from 'echarts'Vue.prototype.$echarts = echarts 2、Sass引入 sass和node-sass 中 node-sass不要引入最新版本  引入@7.x 否则会报错 可能是语法规则改变 3、严格模式不要随意开启、将eslint文件中 extends: 中的vue去除