草庐IT

c++ - std::get_time 在 g++ 和 clang++ 中被破坏了吗?

我今天正在处理一些时间函数,并注意到使用%r(或%p)的标准转换似乎不适用于通过的输入g++或clang++上的std::get_time()。见thislivecodeversion对于g++和clang++。它确实在带有VC++的Windows下似乎可以正常工作(参见closelyrelatedquestion)。另请注意,无论是否包含imbue行,效果都是相同的。如果重要的话,我的Linux机器上的语言环境设置为"en_US.UTF-8"。#include#include#include#include#includeintmain(){std::tmt{};std::strin

c++ - 在clang++与g++中除以复数<double>

当我使用g++(4.8.1或4.9.0)或clang++(3.4)编译以下代码时,我得到不同的输出。#include#includeintmain(){std::complexc={1.e-162,0};std::coutg++:(1e+162,0)叮当++:(inf,-nan)这是clang的错误吗?更新:感谢您的回答!我报告了这个错误:http://llvm.org/bugs/show_bug.cgi?id=19820 最佳答案 标准在[complex.numbers]中说(26.4/3):Iftheresultofafunct

c++ - 在使用 g++ 创建的共享库中隐藏实例化模板

我有一个包含以下内容的文件:#includeclassA{};voiddoSomething(){std::mapm;}当使用g++编译成共享库时,该库包含std::map的所有方法的动态符号.从A是该文件私有(private)的,不可能std::map将在具有相同参数的任何其他共享库中实例化,因此我想隐藏模板实例化(出于thisdocument中描述的某些原因)。我认为我应该能够通过添加模板类的显式实例并将其标记为隐藏来做到这一点,如下所示:#includeclassA{};templateclass__attribute__((visibility("hidden")))std::

c++ - 从 makefile (g++) 创建两个单独的可执行文件

目前,我设置了我的makefile来编译和制作一个相当大的项目。我已经编写了第二个带有main函数的cpp文件来运行测试。我希望这些单独运行,但一起构建并且它们使用相同的文件。这是如何实现的?edit:作为引用,这是我当前的makefile。我不知道如何调整它。CC=g++CFLAGS=-c-Wall-DDEBUG-gLDFLAGS=SOURCES=main.cppFoo.cppBar.cppTest.cppA.cppB.cppC.cppOBJECTS=$(SOURCES:.cpp=.o)EXECUTABLE=myprogramall:$(SOURCES)$(EXECUTABLE)$(

c++ - "g++"不被识别为内部或外部命令,MinGW

在我的电脑上,我有Windows7x86。我安装了MinGW,我写了路径,但是当我进入cmd.exe并写g++-v时它说:"g++"isnotrecognizedasaninternalorexternalcommand.但是当我编写make-v命令时,它会识别它。我在学校需要这个,我在Eclipse中工作,我什至安装了最新的java(我看到它必须安装)。 最佳答案 看到make命令运行正常,我想你忘记在MinGW安装管理器中标记mingw-gcc-g++包了。再次运行MinGW安装管理器并标记mingw-gcc-g++进行安装,然

c++ - 如果使用 g++,为什么 std::cout 可以转换为 void*?

为什么可以将std::ostream转换为void指针?我不知道std::ostream中有任何此类转换运算符。代码如下#includeintmain(){void*p=std::cout;//whydoesthiswork?}我问这个问题是因为我看到一个放置操作符new被调用为Foo*pFoo=new(std::cerr)Foo;完全不知道为什么要写这样的东西。PS:我正在使用g++4.9.2进行编译,无论是否使用-std=c++11。clang++不接受代码。PSS:发现由于所谓的“安全bool问题”(参见@nicebyte的回答),在C++11之前,为std定义了一个void*转

c++ - g++ "calling"一个没有括号的函数(不是 f() 而是 f; )。为什么总是返回 1?

在c++(GNUGCCg++)中,我的代码是“调用”一个没有()的函数。该函数不工作,但编译正常。更令人惊讶的是,代码总是返回1...有什么解释吗?我希望函数名只是一个常规指针,但似乎有点不同......我得到全1只是偶然吗?#includeusingnamespacestd;voidpr(){cout 最佳答案 你实际上并没有调用pr在您的代码中,您将函数指针传递给cout.pr然后被转换为bool当被传递给cout.如果你把cout事先你会输出true而不是1.编辑:使用C++11,您可以编写以下重载:templatestd::

带有 enable_if : different behaviour with g++ and clang 的 C++ 模板重载

在解决基类的模板化成员函数的重载时,我观察到g++(5.2.1-23)和clang(3.8.0)之间的不同行为,-std=c++14.#include#includestructBase{templateautoa(Tt)->void{std::coutstructDerived:publicBase{usingBase::a;templateautoa(Tt)->std::enable_if_t{std::coutd;d.a(1);//failswithg++,prints"true"withclangDerivedd2;d2.a(1);//failswithclang++,prin

c++ - 具有部分模板特化的 g++ 错误

我正在为g++(版本4.8.1_1,Macports)和clang++(版本3.3,Macports)编写一些TMP繁重的代码。虽然g++使用UNBRIDLEDFURY拒绝以下代码list,但clang++使用grace和splendor编译它。哪个编译器是正确的?(我强烈怀疑它是g++,但我想在提交错误报告之前从其他人那里得到一些保证。)您有什么简单或优雅的解决方法可以推荐吗?(我需要使用模板别名,因此不能切换到结构,这会导致g++接受代码。)这是代码list,专为您制作。templatestructsequence;templatestructinteger;//Thisdefin

c++ - 使用 -g 编译本身会降低性能吗?

这个问题在这里已经有了答案:HowdodebugsymbolsaffectperformanceofaLinuxexecutablecompiledbyGCC?(2个回答)关闭6年前。(这是一个关于gcc和clang的问题,但可能适用于其他编译器。)如果我编译我的C或C++代码,并使用-g开关生成调试信息,这本身是否会以任何方式降低已编译程序的性能...最小优化(-O0)?最大优化(-O3)?注意:我并不是指必须解析/加载可执行文件的性能损失,由于额外的内容,性能损失更大;我的意思是运行的代码。 最佳答案 我认为没有任何性能差异。根