草庐IT

git - 如何在 git 中消除歧义的缩写 sha1

我对JoshStone'sanalysisofsha1abbreviationcollisions很感兴趣.假设有人写下了一个缩写的提交ID,8b82547e33,当时它是明确的。但是从那以后,其他对象已经用相同的前缀创建,所以现在git告诉你(出于某种原因两次):$gitshow8b82547e33error:shortSHA18b82547e33isambiguous.error:shortSHA18b82547e33isambiguous.fatal:ambiguousargument'8b82547e33':unknownrevisionorpathnotintheworkin

c++ - 默认初始化和值初始化之间的歧义

我发现很多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并没有理解清楚。这是一个例子:classA{public:intx;};intmain(){Aa;//defaultinitializationsoxhasundefinedvalue.Ab=A();//valueinitializationsoxisascalarthusitisvalueinitializedto0}上面我猜是可以的,但是在这里:intvalue=4;//isthisconsideredavalue-initialization?请帮助我理解这两种初始化形式的主要区别。 最

c++ - 部分模板特化歧义

我不明白为什么main中的语句模棱两可。templatestructX{voidf(){coutstructX{voidf(){coutstructX{voidf(){coutstructX{voidf(){coutstructX{voidf(){coutf;}不是X最专业的模板?这是来自http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fpartial_specialization.htm的示例

c++ - 如何在模板化转换运算符中消除这种构造的歧义?

在对为什么我的代码在GCC上给我一个模棱两可的错误而在Clang上没有错误感到困惑之后,我简化了代码。如下图所示。structFoo{//Foo(Foo&&)=delete;//Foo(constFoo&)=delete;Foo(int*){}};structBar{templateoperatorT(){returnFoo{nullptr};}};intmain(){Foof{Bar{}};}错误如下。main.cpp:17:18:error:calltoconstructorof'Foo'isambiguousintmain(){Foof{Bar{}};}^~~~~~~~main.

c++ - double 与 char* 歧义为零

我有一个方便的C++类,可以使用double或char*进行初始化。除了参数为零的一种情况外,一切都按预期工作。structVar{Var(doublesrc){}Var(char*src){}};intmain(intargc,char*argv[]){VarA=123;VarB="abc";VarC=0;之前我用int代替double,不知为何还好。如何解决这个问题?PS:我知道我可以使用(double)0或只使用0.0,但有没有办法只允许使用0被接受为double? 最佳答案 您可以通过添加第三个构造函数来消除歧义,该构造函数

c++ - c++17类模板的参数推导中构造函数模板会不会导致歧义

考虑一个简单的例子:templatestructfoo{templateclassTT>foo(TT&&){}foo(foo&&){}foo(){}};intmain(){foof1(foo{});//case1.foof2(foo{});//case2.}案例1.在clang中导致foo类的模板参数推导有歧义,而在gcc中则没有。我认为模板函数(这里-构造函数)在重载决议中的优先级较低。这里不是这样吗?错误信息:prog.cc:10:14:error:ambiguousdeductionfortemplateargumentsof'foo'foof1(foo{});//case1.^

c++ 显式多参数构造函数歧义

我现在正在编写的一些代码中遇到了意外问题,我不确定哪个编译器是正确的。我们有一个多参数构造函数,它接受constchar*,constchar*,但它是显式声明的:constexprexplicitWrapper(constchar*a,constchar*b):pair(a,b){}然后我们有一个函数接受Wrapper和一个需要std::pair的重载voidq(Wrapperw);voidq(std::pairw);然后我们有这样的代码,我希望将其称为第二个重载:q({"a","b"});这在clang上编译得很好,但在GCC和MSVC上都无法编译。我一直在尝试在标准中寻找任何提及

c++ - 为什么在 Mac OS X 上使用 size_t 时 uint32_t 和 uint64_t 之间存在歧义?

考虑以下示例代码:#include#includeusingnamespacestd;intf(uint32_ti){return1;}intf(uint64_ti){return2;}intmain(){cout这在MacOSX上失败:$g++--versioni686-apple-darwin10-g++-4.2.1(GCC)4.2.1(AppleInc.build5664)$maketestg++test.cc-otesttest.cc:Infunction'intmain()':test.cc:23:error:callofoverloaded'f(size_t&)'isamb

c++ - 匿名命名空间歧义

考虑以下代码段:voidFoo()//1{}namespace{voidFoo()//2{}}intmain(){Foo();//Ambiguous.::Foo();//CallstheFoointheglobalnamespace(Foo#1).//I'mtryingtocallthe`Foo`that'sdefinedintheanonymousnamespace(Foo#2).}在这种情况下,我如何引用匿名命名空间中的内容? 最佳答案 你不能。该标准包含以下部分(§7.3.1.1,C++03):Anunnamed-namesp

java - 具有接口(interface)的多重继承歧义

我们都知道diamondproblem关于多重继承-A/\BC\/D这个问题描述了类D的模棱两可的情况。如果类A有一个方法,并且B和/或C两者/任何一个都覆盖了该方法,那么D是哪个版本的方法覆盖?这个问题是否也适用于Java中的接口(interface)?如果不是,Java接口(interface)如何克服这个问题? 最佳答案 菱形问题仅适用于实现继承(extends在Java8之前的所有Java版本中)。它不适用于API继承(implements在Java8之前的所有Java版本中)。由于具有匹配类型签名的接口(interface