草庐IT

c++ - GCC 4.7 中是否存在错误。 2's implementation of shared_ptr' s(模板化)赋值运算符?

我的问题涉及shared_ptr的赋值运算符模板在GCC4.7.2中的实现,我怀疑它包含一个错误。前提1:C++11标准这里是我说的赋值运算符模板的签名:templateshared_ptr&operator=(constshared_ptr&r)noexcept;来自C++11标准(20.7.2.2.3):“等价于shared_ptr(r).swap(*this)。”换句话说,赋值运算符模板是根据构造函数模板定义的。构造函数模板的签名如下:templateshared_ptr(constshared_ptr&r)noexcept;来自C++11标准(20.7.2.2.1):“要求:除

c++ - Windows 8 中的开发人员 C : gcc Internal Error

我是一个C编程课的助教,老师使用DevC++作为该课的编译器。我个人会使用不同的,但这里不是我的选择。最近我安装了Windows8Professional64位,虽然我的大学在Dreamspark上可用,所以我可以从一些竞赛的地铁应用程序开发开始。不幸的是,DevC++已经停止编译。它以前在Windows764位上运行良好。编译返返回告时出现错误:Compiler:DefaultcompilerExecutinggcc.exe...gcc.exe"C:\Users\James\Documents\Homework\TA_CPRE_185\counter.c"-o"C:\Users\Ja

c++ - 如何强制 GCC 将常量放入内存而不是生成它们?

我有一个很多在几个函数中定义的常量数组。类似于以下内容:constfloatvalues[4]={-4312.435f,-432.44333f,4.798,7898.89};在检查gcc汇编器输出后,我注意到这些常量是在每次运行函数时生成的。那是相当低效的。我怀疑这是因为C/C++规范说即使数据是const,编译器也不能假设它不会被修改(例如通过const_cast)。是否可以强制gcc不这样认为?我想将这些常量定义在函数体中,因为它们非常复杂。将常量保持在使用它们的位置附近对可维护性有很大帮助。编辑不幸的是,即使定义了常量static,它们也会在每次运行时重新生成。如果有帮助,我会使

c++ - gcc 4.8.1 默认启用 sse 吗?

我在不支持SSE4.1的系统上运行我的旧代码时遇到崩溃,我调试了一下并在glibc中找到了SSE指令,这可能吗?为什么gcc4.8.1发行说明中没有报告这一点? 最佳答案 您可以通过以下命令查看GCC使用了哪些优化:$gcc-Q--help=target例如,在我的机器上,GCC默认不启用sse4.1:$gcc-Q--help=target|grepmsse4.1-msse4.1[disabled]但是,它是受支持的,因为它出现在/proc/cpuinfo中。事实上,如果我要求GCC为我的机器优化生成的代码,它会启用sse4.1:$

c++ - gcc -Wshadow 太严格了?

在以下示例中:classA{public:intlen();voidsetLen(intlen){len_=len;}//warningatthislineprivate:intlen_;};带有-Wshadow的gcc发出警告:main.cpp:4:warning:declarationof`len'shadowsamemberof`this'函数len和整数len是不同的类型。为什么会出现警告?更新我看到人们对“影子”的含义有着广泛的共识。从形式上看,编译器完全按照它的意图去做。但是恕我直言,该标志是不实用的。比如常用的setter/getter成语:classA{voidprop

c++ - 如何在 GCC 中通过优化构建 Release模式?

我需要在“Release模式”中构建并在GCC中进行全面优化的具体选项是什么?如果有多个选项,请列出所有选项。谢谢。 最佳答案 http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html没有“一刀切”——您需要了解您的应用程序、您的要求和优化标志,以确定您的二进制文件的正确子集。或者你想要的答案:-O3 关于c++-如何在GCC中通过优化构建Release模式?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么 GCC 需要在模板中额外声明而 VS 不需要?

templateclassBase{protected:Base(){}T&get(){returnt;}Tt;};templateclassDerived:publicBase{public:Base::get;//LineABase::t;//LineBvoidfoo(){t=4;get();}};intmain(){return0;}如果我注释掉A行和B行,这段代码在VisualStudio2008下编译得很好。但是当我在GCC4.1下编译并注释行A和B时,我得到了这些错误:Inmemberfunction‘voidDerived::foo()’:error:‘t’wasnotd

c++ - 为什么 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?

以下代码:std::arrayarr1;std::arrayarr2;...用gcc和clang编译因为std::array::size被认为是constexpr。但以下内容不能用gcc(版本5.3.020151204)编译:std::array,4>arr1;std::array,arr1.size()>arr2;对我来说,如果第一个代码有效,则没有理由编译失败,但由于我没有找到很多关于此的帖子,我不知道它是否是gcc错误或clang扩展?gcc的错误(我不太明白...):main.cpp:Infunction'intmain()':main.cpp:6:46:error:callt

c++ - C++ 标准中与 [basic.link]/7 相关的 GCC 和 clang 之间的矛盾结果

这段代码在clang中编译,namespaceA{voidf(){voidg();g();}}voidA::g(){}但如果g在命名空间A中定义如下,GCC只接受代码:namespaceA{voidf(){voidg();g();}voidg(){}}但我相信[basic.link]/7中没有任何内容不允许上面的第一个片段。 最佳答案 [basic.link]/p7,强调我的:Whenablockscopedeclarationofanentitywithlinkageisnotfoundtorefertosomeotherdecl

c++ - 这个使用标准库的非常简单的 C++ 程序不能用 GCC 编译

我不明白为什么这不起作用...我在Linux中工作。g++什么都不做。gcc打印以下内容:/tmp/ccyg7NDd.o:Infunction`main':test.cc:(.text+0x14):undefinedreferenceto`std::cout'test.cc:(.text+0x19):undefinedreferenceto`std::basic_ostream>&std::operator>(std::basic_ostream>&,charconst*)'test.cc:(.text+0x21):undefinedreferenceto`std::basic_ost