草庐IT

c++ - 我可以停止 GCC 将标准库名称包含到全局 namespace 中吗?

当我在C++中使用标准C头文件时,我通常更喜欢将标识符放入std中的形式。命名空间,例如.然而,当我使用这些时,GCC也会将名称放入全局命名空间,这意味着它将接受如下程序:#includestd::size_tx;size_ty;intmain(){}在这里,x的声明是正确的,但是y的声明如果我希望我的代码可移植,应该被拒绝。(请注意,如果我包含而不是,GCC将正确地拒绝x的声明)。我能否让GCC拒绝声明y以上?我编译了所有我能想到的迂腐和警告:-std=c++17-pedantic-Wall-Wextra-Wpedantic-Weffc++这些似乎都不能阻止GCC接受不可移植的形式。

c++ - 如何使用 gcc 编译 SIMD 代码

我在SIMD中编写了这段矩阵乘法代码,我可以在VisualStudio中编译它,但现在我需要在Ubuntu中使用gcc/g++编译它。我应该使用哪些命令来编译它?我是否需要对代码本身进行任何更改?#include#include#include#include#include#include#includeusingnamespacestd;#defineMAX_NUM1000#defineMAX_DIM252intmain(){intl=MAX_DIM,m=MAX_DIM,n=MAX_DIM;__declspec(align(16))floata[MAX_DIM][MAX_DIM],

c++ - gcc not_fn 实现 : why does _Not_fn accept additional int parameter?

最近我看了看implementation的std::not_fngcc提供的函数模板。此函数模板的返回类型是_Not_fn-一个包装类模板,它否定包装的可调用对象。事实证明,_Not_fnconstructor接受一个未明确使用的附加int参数:template_Not_fn(_Fn2&&__fn,int):_M_fn(std::forward(__fn)){}对构造函数的调用如下所示:templateinlineautonot_fn(_Fn&&__fn)noexcept(std::is_nothrow_constructible,_Fn&&>::value){return_Not_f

c++ - gcc-c++ 是否没有为当前的 x86-64 处理器优化原子操作

给定以下测试程序:#include#includeint64_tprocess_one(){int64_ta;//Shouldbeatomiconmyhaswellint64_tassign=42;a=assign;returna;}int64_tprocess_two(){std::atomica;int64_tassign=42;a=assign;returna;}intmain(){autores_one=process_one();autores_two=process_two();std::cout编译:g++--std=c++17-O3-march=nativemain.c

c++ - 为什么我不能使用 gcc 链接具有 C 接口(interface)的混合 C/C++ 静态库?

我有一个混合的C/C++库。在外部它提供了一个使用externC的C接口(interface)。内部有模板和类。使用“ar”创建库没有问题。该文件称为libo-client.a。但是,当使用gcc(不是g++)链接.a文件时,我得到很多错误,如下所示:libo-client.a(mysocket.o):(.rodata._ZTV7mStream[vtableformStream]+0x10):undefinedreferenceto`__cxa_pure_virtual'...mysocket.cpp:(.text+0x15ad):undefinedreferenceto`operat

c++ - 如果我比较 double ,如何让 gcc 生成警告?

我想在我的代码中捕获double的相等比较并获得警告。是否有GCC警告会执行此操作?这不是可以在源代码中轻易找到的东西。 最佳答案 GCC4.7.0有:gcc--help=warnings除此之外,它还会产生:-Wfloat-equalWarniftestingfloatingpointnumbersforequality(GCC4.1.2不支持扩展帮助;它“只是”有--help。不过它确实有警告选项。) 关于c++-如果我比较double,如何让gcc生成警告?,我们在StackOve

c++ - 为什么 clang 拒绝 gcc 接受的这个 unordered_set 定义?

我想用我自己的哈希函数测试unordered_set:#include#include#includeusingnamespacestd;structnode{size_tvalue;booloperator==(constnode&n){returnvalue==n.value;}};size_th(constnode&n){returnn.value;}intmain(){unordered_set>s2(3,h);//failedreturn0;}我尝试编译它,但clang给出了大量错误:clang++m.cpp-std=c++11Infileincludedfromm.cpp:

c++ - free() 在传递由 posix_memalign() 创建的有效指针时挂起 - gcc 和 C++11

我需要分配16字节对齐的内存,据我所知,可接受的方法是posix_memalign(),使用manpage作为引用(其他StackOverflow问题表明是这样)。下面的代码被简化以排除不相关的部分(即其他平台),但我保留了一些上下文(sse只是一个命名空间):#include#includefloat*sse::alloc(unsignedintcount){void*p;intr=posix_memalign(&p,16,sizeof(float)*count);if(r==0)return(float*)p;/*elseoutputerrorandexit(1)-hasnever

c++ - gcc/g++ 可以在忽略我的寄存器时告诉我吗?

用gcc/g++编译C/C++代码时,如果忽略了我的寄存器,能告诉我吗?例如,在这段代码中intmain(){registerintj;intk;for(k=0;kj将用作寄存器,但在此代码中intmain(){registerintj;intk;for(k=0;kj将是一个普通变量。它能告诉我我使用寄存器的变量是否真的存储在CPU寄存器中吗? 最佳答案 您完全可以假设GCC会忽略register关键字,除了-O0。但是,它不应该以任何方式产生影响,如果您深入了解,您应该已经在阅读汇编代码了。这是关于此主题的信息线程:http://

c++ - GCC 的 std::sort 与 lambda 的不稳定行为

以下代码在使用GCC6.1.0编译时会生成段错误。奇怪的是,错误是一致的,但不会发生在较小的尺寸或略有不同的比较表达式上。你们知道为什么吗?#include#include#includeintmain(){intn=1000;std::vector>vec;for(inti=0;i((7*i)%3,(3*i)%5));}std::sort(vec.begin(),vec.end(),[](std::pairconst&p1,std::pairconst&p2){return(p1.first 最佳答案 尝试改变(p1.second