草庐IT

c++ - 注释中的三字母,在 c++11 中转换,在 c++17 中忽略

考虑以下代码(注意注释):#includeintmain(){intx=1;//为了编译这个程序,我使用了GNUC++编译器g++:$g++--version//g++(Ubuntu6.5.0-1ubuntu1~16.04)6.5.020181026现在,当为C++11和C++17编译时,我得到了不同的结果(和警告)。对于C++11,g++-std=c++11trigraph.cpp-Wall:trigraph.cpp:5:26:warning:trigraph??/convertedto\[-Wtrigraphs]intx=1;//对于C++17,g++-std=c++17trigr

c++ - 在 C++17 中解压可变元组

在c++17(也许是C++2a)中有什么比用std::index_sequence解压可变参数元组的经典C++14方法更好的吗??任何比这更好的:templateclassMultiIterator{public:MultiIterator(Iconst&...i):i(i...){}MultiIterator&operator++(){increment(std::index_sequence_for{});return*this;}private:templatevoidincrement(std::index_sequence){std::ignore=std::make_tup

c++ - 我们在 C++17 中有自动数组吗?

考虑以下代码:autonumbers={1,2,3,4};//'numbers'isanstd::intializer_listautonum_array[]={1,2,3,4}//error->declaredasanarrayof'auto'为什么会有这个限制? 最佳答案 使用C++17和classtemplateargumentdeduction,这很好用:#includestd::arrayarr{1,2,3,4};inti=arr.size();//4 关于c++-我们在C++

c++ - std::filesystem::directory_iterator 链接器问题 (C++17)

这个问题在这里已经有了答案:LinkerrorsusingmembersinC++17(4个答案)关闭4年前。在尝试使用C++17标准中的std::filesystem::directory_iterator时,我的C++构建出现问题。代码如下:std::vectorIO::getDirectoryList(std::filesystem::path&dirPath){std::vectorfiles;for(auto&file:std::filesystem::directory_iterator(".")){files.push_back(file.path());}returnf

JDK17、IDEA 2022【安装一条龙】

JDK17、IDEA2022安装一条龙一、JDK17安装1.下载JDK172.安装jdk17二、配置环境变量三、IDEA2022安装1.下载IDEA20222.安装IDEA20223.运行第一个程序四、可能遇到的问题本次安装安装环境为:Windows11系统jdk版本为:jdk-17.0.5IDEA版本为:ideaIU-2022.1.2一、JDK17安装1.下载JDK17下载地址:👉下载点我2.安装jdk17双击下载的好的.exe文件二、配置环境变量新建系统变量配置Path😇可直接复制%JAVA_HOME%\bin3.🧪测试环境变量是否配置成功🎊恭喜你,JDK17安装成功了三、IDEA2022

c++ - C++17/C++2a 编译时的哈希类型

考虑以下代码:#include#includetemplateconstexprstd::size_ttype_hash(T)noexcept{//Computeahashforthetype//DOSOMETHINGSMARTHERE}intmain(intargc,char*argv[]){autox=[]{};autoy=[]{};autoz=x;std::cout我希望type_hash函数在编译时返回该类型唯一的哈希键。有没有办法在C++17或C++2a中做到这一点(理想情况下只依赖标准而不依赖编译器内在函数)? 最佳答案

C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本

以下代码使用设置为C++17的gcc7.1.0进行编译,但不使用设置为C++14(或VisualStudio2017)进行编译。在Wandbox上很容易重现.要让它与C++11/14一起工作,必须做些什么?#include#includeintmain(){structConvert{operatorstd::chrono::milliseconds(){std::cout 最佳答案 让我们从为什么这在C++14中不起作用开始。std::chrono::duration有两个相关的c'tors(std::chrono::millis

c++ - C++17 标准是否保证 union 的地址与其成员的地址相同?

我目前正在编写一个池分配器。我的问题归结为以下代码:templateunionmyUnion{Tdata;myUnion*nextUnion;};voidsomeFunction(){myUnionmu;T*t=new(std::addressof(mu.data))T();//somecodemyUnion*mu2=reinterpret_cast*>(t);}mu的地址总是和mu2一样吗? 最佳答案 是的。9.2/19(N4659中为12.2/24):Ifastandard-layoutclassobjecthasanynon-

c++ - N3797 的§8.5 p17(初始值设定项的语义)中是否缺少案例?

对于聚合structS{inti,j;};声明Ss({1,2});和Ss({1});执行直接初始化到N3797§8.5p16:TheinitializationthatoccursintheformsTx(a);Tx{a};aswellasinnewexpressions(5.3.4),static_castexpressions(5.2.9),functionalnotationtypeconversions(5.2.3),andbaseandmemberinitializers(12.6.2)iscalleddirect-initialization.但§8.5p17似乎没有描述它

c++ - C++14/17 项目是否可以使用使用 C++11 标准编译的二进制库,或者源代码是否需要重新编译?

可以在c++14/17项目中使用使用C++11编译的二进制文件吗?c++17项目中的c++14二进制库怎么样?或者是否需要使用与项目相同的标准更新和重新编译源代码?是否有任何其他方法可以在新的标准项目中包含旧的标准C++库? 最佳答案 C++标准与二进制文件格式无关。这仅取决于编译器/链接器和操作系统。因此,如果编译器供应商更改了ABI(应用程序二进制接口(interface)),则不能简单地将各个部分链接在一起。你可以在这里读到,只与gcc相关:https://gcc.gnu.org/onlinedocs/libstdc++/ma