草庐IT

c++ - G++ 4.5 错误 : No diagnostic for narrowing in initializer list

我尝试了以下代码:intmain(){intx{23.22};}其中包括需要缩小的初始化,但代码编译正常,没有任何错误或警告。另一方面,以下代码给出了错误:intmain(){intx[]{23.22};}我是发现了错误还是什么?PS:我目前使用的是GCC4.5.0 最佳答案 看起来像一个错误。以下直接来自n3092草案:8.5.4List-initialization—Otherwise,iftheinitializerlisthasasingleelement,theobjectisinitializedfromthatelem

c++ - 为什么 g++/ld 内存不足?

我正在尝试编译Qt(Windows7,msys下的mingw32-g++32位),但ld内存不足。有谁知道为什么?或者也许是一种解决方法?谢谢!$g++-mthreads-shared-Wl,--out-implib,i:/Programs/Qt/lib/libQtGuid4.a-o../../lib/QtGuid4.dllobject_script.QtGuid.Debug-L'i:/Programs/Qt/lib'-L'i:/Programs/Qt/lib'-lgdi32-lcomdlg32-loleaut32-limm32-lwinmm-lwinspool-lws2_32-lol

c++ - (g++ 4.7.1) 用等效类 typedef 替换显式类型名称无法编译

我正在尝试创建一个模板化函数,它接受一个可迭代对象和一个函数,这样传递的函数将被隐式转换为适当类型的std::function(从而允许它与完整函数和lambda一起使用)。代码如下:#include#include#include#includetemplatevoidbar(constT&base,std::functionf)//works//voidbar(constT&base,std::functionf)//failstocompile{std::cout)==typeid(std::function))?"identical":"distinct"){0,1},filt

c++ - Visual Studio 与 G++ 中的 Decltype 和友元函数

我正在编写一些C++代码来进行vector数学运算。它只是一个围绕std::array实例的薄包装器。我想重载非成员begin()函数以将迭代器返回到支持数组的开头。为此,我编写了一个简单的友元函数,它具有一个auto返回类型和一个使用decltype的尾随返回类型,它只是将调用转发给成员变量。它不会编译,我不明白为什么。我开始摆弄一个较小的示例,发现以下代码可以在G++4.7下编译,但不能在最新的VisualStudio2012Professional下编译。#include#includetemplateclassMyClass{private:std::arrayelts;pub

c++ - gcc、g++、cygwin 和 mingw 之间的关系?

我知道对于我的类(class),我必须安装cygwin才能让我的NetbeansIDE运行,但是我在设置过程中看到了g++和gcc的选项,我不确定它们是否相同,wingw在哪里?它是另一个编译器吗?如果是,为什么选择on而不是另一个? 最佳答案 g++和gcc分别是gnuC++和C编译器。它们实际上是具有不同标志的相同编译器。MinGW是“Windows的极简Gnu”。它是在Windows上运行的gnu编译器的一个端口。Cygwin是gnu编译器(以及各种其他实用程序)到Windows的另一个端口。更准确地说(IMO,无论如何),它

c++ - 仅当 .h 位于特定目录中时,g++ 才会神秘地失败

我在全新的OSX10.4.11+Xcode2.5安装中遇到了一个非常奇怪的问题。我已将其简化为最小的测试用例。这是test.cpp:#include"macros.h"intmain(void){return1;}这是macros.h:#ifndef__JUST_TESTING__#define__JUST_TESTING__templatevoidswap(T&pT1,T&pT2){TpTmp=pT1;pT1=pT2;pT2=pTmp;}#endif//__JUST_TESTING__如果两个文件都在同一目录中,则编译和工作正常。但是,如果我将macros.h放入/usr/inclu

c++ - g++ 包括 boost 库

我用bjam构建了我的boost库,然后将所有.a文件移动到c:\Server\libs\boost_1_46_0\lib如果我想编译我的程序有一些错误:编译命令g++-Ic:\Server\libs\boost_1_46_0\-Lc:\Server\libs\boost_1_46_0\lib\-lboost_thread-mgw45-mt-1_46-otry1try1.cpp错误C:\Users\FEHERG~1\AppData\Local\Temp\ccB46To7.o:try1.cpp:(.text+0xe9):undefinedreferenceto`_imp___ZN5boo

c++ - 在 g++ 中启用严格的别名警告

在g++中启用严格别名警告的正确方法是什么?VC++10是否实现了这些规则? 最佳答案 对g++使用-fstrict-aliasing。我还使用-Wstrict-aliasing=2查看与可能违反严格别名规则的行为相关的警告。 关于c++-在g++中启用严格的别名警告,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8552802/

c++ - g++ -std=c++0x 和兼容性

我正在使用g++4.4在Linux上编译一个共享库。如果可以的话,我想在库中使用一些C++11功能,但我无法更新编译器的版本,也无法为我的库的用户要求任何特殊的编译器开关。我有两个问题,但找不到明确的答案。如果我使用-std=c++0x或-std=g++0x编译共享库,我是否可以保证使用我的库的程序不需要这些开关(前提是我没有头文件中的c++0x特性)?这似乎有效,但我不想在注册过程中遇到一些微妙的问题。g++4.4中的C++11标准库非常不完整。由于许多标准库仅包含头文件,而gnu的头文件通常充满版本ifdef,我认为可能有一种方法可以使用至少libstdc++中的头文件的更新版本。

c++ - 为什么 list::push_back 在 VC++ 中比在 g++ 中慢得多?

此代码在我的VS2012中大约需要20秒,但在G++中仅需1.x秒。均在win8x64中并使用默认选项编译。listitems;for(inti=0;i是关于内存分配的吗?在我的机器上用VC++输出后释放内存需要3~5秒,而在我friend的(win7x64)上甚至超过1分钟。 最佳答案 嗯...我扩展了您的代码以包含计时:#include#include#include#includeintmain(){std::listitems;clock_tstart=clock();for(inti=0;i我用VC++编译使用:cl/O2