草庐IT

c# - 静态变量的初始化顺序不明确

在研究用C#构建单例的最佳方法时,我偶然发现了以下article在C++中有一个简短的提及"TheC++specificationleftsomeambiguityaroundtheinitializationorderofstaticvariables."我最终调查了这个问题并找到了this和this.基本上要点(据我所知)是C++中静态变量的初始化顺序是未定义的。好吧,我猜到目前为止还不错,但后来我想了解文章后面所做的以下陈述"Fortunately,the.NETFrameworkresolvesthisambiguitythroughitshandlingofvariablei

c++ - 'make_shared' 不明确

除非定义了B0RKEN(就像命令行上的-DB0RKEN一样),否则编译以下内容:#include#include#includeusingboost::shared_ptr;usingboost::make_shared;usingmy_fn=std::function;voidfoo(){my_fnfn=[](){};#ifdefB0RKENshared_ptrk=make_shared(fn);#elseshared_ptrk=make_shared(0);#endif}boost似乎在玩一些有趣的游戏,这可能是这段代码出现这个问题的原因。我不明白的是为什么它适用于shared_p

c++ - 修复 C++ 多重继承不明确调用

我有三个结构如下的类:#includeusingnamespacestd;classKeyword{public:virtualfloatGetValue()=0;};classCharacterKeyword:publicKeyword{public:virtualfloatGetValue(){return_value;}private:float_value;};classMeasurementKeyword:publicKeyword{public:virtualfloatGetValue(){return_value;}private:float_value;};classA

c++ - 不明确的模板实例化

有人可以解释这里的歧义吗?templatestructthing;templatestructthing{thing(int&,Rest&...){}};templatestructthing{thing(First&,Rest&...){}};intmain(){intmyint;charmychar;thingt(myint,mychar);} 最佳答案 如果你专注于int而不是int&它会起作用templatestructthing;templatestructthing{thing(int&,Rest&...){}};tem

c++ - 我不明白在下面的代码中将 char buffer[] 与 X 类型的对象对齐的原因

Stroustrup在他的新书第151页中展示了以下使用类型说明符alignas的示例:Sometimes,wehavetousealignmentinadeclaration,whereanexpression,suchasalignof(x+y)isnotallowed.Instead,wecanusethetypespecifieralignas:alignas(T)means"alignjustlikeaT."Forexample,wecansetasideuninitializedstorageforsometypeXlikethis:voiduser(constvector

c++ - 以 "different"调用约定作为参数的 64 位 C++ 传递函数会产生不明确的错误

我的目标是使用__cdecl和__stdcall调用约定轻松提取任意函数的原型(prototype)。它在32位中运行良好。唯一改变的是我的模板函数参数中的调用约定。根据Wikipedia:Whencompilingforthex64architectureinaWindowscontext(whetherusingMicrosoftornon-Microsofttools),thereisonlyonecallingconvention—theonedescribedhere,sothatstdcall,thiscall,cdecl,fastcall,etc.,arenowallon

c++ - 转换重载函数不明确

我有一个问题,即创建指向重载函数的函数指针会导致g++4.7和g++4.8上的编译错误,但在g++4.4、g++4.6或clang++3.2(可能还有VS2010)上不会。我在谷歌上搜索了一下,想知道问题出在g++还是我的代码上,但我仍然无法决定。适用于函数指针转换的重载决议规则与适用于函数调用的重载决议规则是否不同?这是演示问题的最小化代码:templatestructDummy{typedefTvalue_type;value_typevalue;};templatetypenameT::value_typef(constT&x){returnx.value;}templateTf

c++ - 关于模板声明中声明的措辞不明确

14/1[temp]提供:Thedeclarationinatemplate-declarationshall(1.1)—declareordefineafunction,aclass,oravariable,or(1.2)—defineamemberfunction,amemberclass,amemberenumeration,orastaticdatamemberofaclasstemplateorofaclassnestedwithinaclasstemplate,or(1.3)—defineamembertemplateofaclassorclasstemplate,or(1

c++ - 多重继承引起的C++拷贝构造函数调用不明确

我在执行某项任务时遇到了问题,这是一个练习,而不是一个真正的程序。任务是定义结构D的复制构造函数,其行为方式与编译器生成的复制构造函数完全相同。classOb{};structA{Oba;};structB:A{Obb;};structC:A,B{Obc;};structD:C,A{Obd;};如您所见,结构A在结构D中间接派生了几次,这导致了复制构造函数定义中的歧义,如下所示:D(constD&_d):C(_d),A(_d),d(_d.d){}我的问题是如何正确定义复制构造函数?没有上述定义的代码编译通过,所以看起来应该是可以的。MinGW4.8.1错误信息:zad3.cpp:12:

c++ - 不明确的引用和命名空间(来自两个外部库的定义冲突)

我经历了我无法理解的定义的崩溃。问题的示意图如下:主项目文件有两个包含:includeinclude第一个header包括库中的其他几个header,其中一个header有一个直接的(未覆盖namespace)定义:templateclassSparseMatrix;lib2.h里面有如下内容namespacelib2{usingnamespacelib3;class...{...SparseMatrix......}}在lib3里面,覆盖着命名空间,还有一个SparseMatrix类的定义。每个库单独编译没有问题。当我尝试编译使用的可执行文件时,编译器产生错误:lib2.h:70:7