草庐IT

c++ - C++ 标准是否保证函数返回值具有常量地址?

考虑这个程序:#includestructS{S(){print();}voidprint(){printf("%p\n",(void*)this);}};Sf(){return{};}intmain(){f().print();}据我所知,这里只构造了一个S对象。不会发生复制删除:首先没有要删除的复制,实际上,如果我明确删除复制和/或移动构造函数,编译器会继续接受程序。但是,我看到打印了两个不同的指针值。发生这种情况是因为我平台的ABI在CPU寄存器中返回可复制的类型,例如这种类型,因此该ABI无法避免复制。即使完全优化函数调用,clang也会保留这种行为。如果我给S一个重要的复制构

c++ - C++ 标准是否保证函数返回值具有常量地址?

考虑这个程序:#includestructS{S(){print();}voidprint(){printf("%p\n",(void*)this);}};Sf(){return{};}intmain(){f().print();}据我所知,这里只构造了一个S对象。不会发生复制删除:首先没有要删除的复制,实际上,如果我明确删除复制和/或移动构造函数,编译器会继续接受程序。但是,我看到打印了两个不同的指针值。发生这种情况是因为我平台的ABI在CPU寄存器中返回可复制的类型,例如这种类型,因此该ABI无法避免复制。即使完全优化函数调用,clang也会保留这种行为。如果我给S一个重要的复制构

c++ - 处理 libc++ 和较旧的 libstdc++ 之间的 ABI 差异的好方法是什么?

在Mac上处理libc++和stdlibc++之间的ABI不一致的好方法是什么(如果有)?问题:许多c++11功能需要C++标准库的新libc++实现。但是libc++与旧的libstdc++不兼容ABI,而目前大多数软件通常链接到后者。例如,系统编译器仍然使用stdlibc++,这意味着我所有使用macports安装的库对于像字符串这样的标准类都有不同的ABI,并且无法与大量使用c++11的项目链接。我目前的解决方案:保留两个版本的库,这通常会导致问题(boost、opencv等)并链接到适当的版本。我想有人可能会建议,如果我真的想使用libc++,我应该使用stdlibc++清除我

c++ - 处理 libc++ 和较旧的 libstdc++ 之间的 ABI 差异的好方法是什么?

在Mac上处理libc++和stdlibc++之间的ABI不一致的好方法是什么(如果有)?问题:许多c++11功能需要C++标准库的新libc++实现。但是libc++与旧的libstdc++不兼容ABI,而目前大多数软件通常链接到后者。例如,系统编译器仍然使用stdlibc++,这意味着我所有使用macports安装的库对于像字符串这样的标准类都有不同的ABI,并且无法与大量使用c++11的项目链接。我目前的解决方案:保留两个版本的库,这通常会导致问题(boost、opencv等)并链接到适当的版本。我想有人可能会建议,如果我真的想使用libc++,我应该使用stdlibc++清除我

c++ - 在当前 Linux 发行版上打包 C++11 软件是否安全?

作为Linux发行版的下游维护者,我通常维护的一些包开始在其代码库中使用C++11功能。它们都依赖于Linux发行版打包的不同库。ProblemswiththeABI在将C++11代码与C++98和AFAIK混合时可能会出现,当前大多数主要的Linux发行版在编译软件生成包时默认情况下都没有启用C++11标志。问题是:主要的Linux发行版是如何处理C++11代码的输入的?在使用系统库时,是否有适当的方法来检查或避免ABI的这些问题?谢谢。 最佳答案 除了C++11可以激发二进制更改之外,该问题与C++11与C++98无关。由C++

c++ - 在当前 Linux 发行版上打包 C++11 软件是否安全?

作为Linux发行版的下游维护者,我通常维护的一些包开始在其代码库中使用C++11功能。它们都依赖于Linux发行版打包的不同库。ProblemswiththeABI在将C++11代码与C++98和AFAIK混合时可能会出现,当前大多数主要的Linux发行版在编译软件生成包时默认情况下都没有启用C++11标志。问题是:主要的Linux发行版是如何处理C++11代码的输入的?在使用系统库时,是否有适当的方法来检查或避免ABI的这些问题?谢谢。 最佳答案 除了C++11可以激发二进制更改之外,该问题与C++11与C++98无关。由C++

c++ - Visual Studio 2012 更新是否会破坏 C++ ABI?

当Microsoft在2012年9月最初发布VisualStudio2012时,他们宣布了更定期为VisualStudio提供更新的计划。从那以后,他们发布了VisualStudio2012Update1(VisualStudio2012.1)2012年11月和VisualStudio2012Update2(VisualStudio2012.2)2013年4月。我的问题是:更新是否对C++ABI进行了任何更改(关于初始VS2012版本)?链接不同VS2012版本的.lib安全吗?我在互联网上搜索了一段时间,没有找到任何来自微软的明确声明。一些sources提到C++代码生成中的一些错误

c++ - Visual Studio 2012 更新是否会破坏 C++ ABI?

当Microsoft在2012年9月最初发布VisualStudio2012时,他们宣布了更定期为VisualStudio提供更新的计划。从那以后,他们发布了VisualStudio2012Update1(VisualStudio2012.1)2012年11月和VisualStudio2012Update2(VisualStudio2012.2)2013年4月。我的问题是:更新是否对C++ABI进行了任何更改(关于初始VS2012版本)?链接不同VS2012版本的.lib安全吗?我在互联网上搜索了一段时间,没有找到任何来自微软的明确声明。一些sources提到C++代码生成中的一些错误

c++ - Apple clang 编译器版本控制架构?

前段时间,GCC>=5和Clang>=4编译器更改了其版本号的语义,因此主要版本号将在任何非错误修复版本上增加。Apple在ABI兼容性或任何其他范围方面是否遵循任何带有clang编译器的版本控制架构?我想知道apple-clang9.0是否与9.1的ABI兼容等等。 最佳答案 Apple在每个Xcode版本中都会增加其编译器版本号,因此查找ABI更改的适当位置是Xcodereleasenotes.我能找到的最新ABI更改是Xcode6:Thelibc++headersinXcode6includeachangetomakestd:

c++ - Apple clang 编译器版本控制架构?

前段时间,GCC>=5和Clang>=4编译器更改了其版本号的语义,因此主要版本号将在任何非错误修复版本上增加。Apple在ABI兼容性或任何其他范围方面是否遵循任何带有clang编译器的版本控制架构?我想知道apple-clang9.0是否与9.1的ABI兼容等等。 最佳答案 Apple在每个Xcode版本中都会增加其编译器版本号,因此查找ABI更改的适当位置是Xcodereleasenotes.我能找到的最新ABI更改是Xcode6:Thelibc++headersinXcode6includeachangetomakestd: