草庐IT

c++ - 在 C++ 中嵌套在模板中的类中使用基类的成员时出错

考虑以下示例:templatestructA{structB{intb;};structC:B{voidf(){b=0;}};};用GCC4.8.1编译它会出现以下错误:test.cc:Inmemberfunction‘voidA::C::f()’:test.cc:9:11:error:‘b’wasnotdeclaredinthisscopeb=0;^但是,b是父类B的成员(我在示例中使用了struct来公开所有内容)并且如果我使A非模板一切编译。为什么编译器会报错,我该如何避免? 最佳答案 这在语言中是一种晦涩的极端情况,但解决方

c++ - 使用模板输入双关语

我想知道以下代码是否是一种可接受的方法,可以在不违反严格的别名规则的情况下处理类型双关语。我意识到此方法依赖于GCC编译器扩展,因此无需指出这一点。templateinlineoutput_typepunning_cast(constinput_type&input){static_assert(std::is_pod::value,"output_typeforpunning_castmustbePOD");static_assert(std::is_pod::value,"input_typeforpunning_castmustbePOD");static_assert(size

c++ - 为什么字符串连接宏不适用于这个 "+"案例?

小问题:是否允许为字符串连接宏##连接特殊符号,例如+、-?例如,#defineOP(var)operator##varOP(+)会扩展为operator+吗?具体问题:#include"z3++.h"#includenamespacez3{z3::exproperator+(z3::exprconst&,z3::exprconst&);}typedefz3::expr(*MyOperatorTy)(z3::exprconst&,z3::exprconst&);#defineSTR(var)#var#definez3Op(var)static_cast(&z3::operator##v

c++ - 警告 : 'visibility' attribute ignored - symbol visibility - C++/gcc

相关主题:Whydoesconstimplyinternallinkageinc++,whenitdoesn'tinC?我正在关注GCCvisibilitywiki为我的共享库添加可见性。当我编译我的源文件时它会生成一个警告warning:'visibility'attributeignored[-Wattributes]这是我的代码://my_shared_lib.h#if__GNUC__>=4#defineDLL_API__attribute__((visibility("default")))#defineDLL_LOCAL__attribute__((visibility("h

c++ - 与 GCC/MSVC 中的 lambda 转换构造函数不一致

哪个(如果不是两个)违反规范?在MSVC2013和MSVCNov2013CTP上尝试使用MSVC,GCC是MinGWx644.9.1with-std=c++11。templateclassmemoizer{usingfunc_type=ret_type(*)(constint);constfunc_typefunc;std::mapcache;public:memoizer(func_typefunc):func(func){}ret_typeoperator[](constintn){constautoit=cache.find(n);if(it!=cache.end())retur

c++ - 如何启用 _USE_UNIX98 (Gcc/C++ v2.96)

我有一个在实际编译器中运行的C++应用程序(我用eclipse编译它)。现在,我需要在Redhat7.3上使用Kdevelop在非常旧的编译器版本(gcc/c++v2.96)上编译它。当我编译应用程序时,出现以下错误:swprintfundeclared。它包含wchar.hheader,但我在RH7.3操作系统中看到了此文件,并且仅在声明了__USE_UNIX98__USE_ISOC99时才声明此函数。如何启用__USE_UNIX98? 最佳答案 GNUlibc使用特殊的系统头文件定义了应该在其所有头文件中启用的功能.如果您定义适

c++ - 在 Visual Studio 中调用 std::swap 时的 std::bad_function_call

我正在尝试将我的代码从Linux移植到Windows。但是,对于VisualStudio,我的代码因以下错误而崩溃:MicrosoftC++exception:std::bad_function_callatmemorylocation这是我的代码:#includeclassFoo{public:Foo(int):m_deleter{[](){}}{}Foo(constFoo&)=delete;Foo(Foo&&)=default;Foo&operator=(constFoo&)=delete;Foo&operator=(Foo&&)=default;~Foo(){m_deleter(

c++ - 跳转到 VLA 阵列上时出现段错误

下面的例子演示了这个问题:#includeintmain(){unsignedintremaining=1;gotoloop;while(remaining){unsignedchartmp[remaining];printf("&tmp:%p\n",tmp);loop:remaining=512;//orsomethingelse;}}最初,“remaining”变量的初始化有点长,我使用goto在一行中对其进行初始化。然而,现在这个例子在printf行给出了段错误。看起来数组没有正确初始化。即使gdb也无法打印tmp数组的地址:ProgramreceivedsignalSIGSEG

c++ - 为什么 move 语义和 RVO 都没有按预期工作?

我最近在我的方程求解器中偶然发现了一些奇怪的行为,这让我问自己是否真的了解move语义和RVO如何协同工作。有很多relatedquestions在这个论坛上,我也读过manygeneralexplanations对此。但我的问题似乎很具体,所以我希望有人能帮助我。涉及的结构总体上有点复杂,但至少可以分解为:structFoo{Bar*Elements;Foo(void):Elements(nullptr){cout现在让我们考虑以下短程序:intmain(){Fooa=Foo::Example();cout这些是我在运行这段代码之前的期望:Example方法实例化本地Foo对象,导致

c++ - CMake add_compile_options 在适当的时候会影响链接器选项吗?

一些编译器选项实际上可能需要额外的链接选项才能真正有效。例如,启用GCC'sLinkTimeOptimization,-flto选项必须在编译命令和链接命令中传递。有一个漂亮的builtincmakecommand用于添加编译选项,但据我所知,没有相应的链接选项命令。即使有,当我使用的编译选项暗示它们时需要明确指定它们也会很烦人。那么add_compile_options(-flto)是否将-flto添加到link命令?如果没有,我是否需要直接设置(LINK_FLAGS....? 最佳答案 add_compile_options和t