在重构一些C++11代码时,我偶然发现了一件奇怪的事情。也就是说,似乎不可能定义一个CV限定的(const、volatile或constvolatile)基类,例如:structA{inta=0;};structB:Aconst{};//ErrorherewithClangandGCC!但是,以下编译没有错误:structA{inta=0;};usingAC=Aconst;structB:AC{};//NOERRORHERE!?Qualifiersareignored.intmain(){Bb;b.a=42;//NOERRORmodifyingafieldofconstbase.ret
假设我有这个例子:charconst*constfoo(){/*whichisinitializedtoconstchar*const*/returnstr;}避免编译器警告“返回类型的类型限定符没有意义”的正确方法是什么? 最佳答案 你写它的方式是说“返回的指针值是const”。但是非类类型的右值是不可修改的(从C继承),因此标准说非类类型的右值永远不是const限定的(即使你指定了最右边的const也被忽略了),因为const有点多余.一个人不写-例子:intf();intmain(){f()=0;}//erroranyway!
假设我有这个例子:charconst*constfoo(){/*whichisinitializedtoconstchar*const*/returnstr;}避免编译器警告“返回类型的类型限定符没有意义”的正确方法是什么? 最佳答案 你写它的方式是说“返回的指针值是const”。但是非类类型的右值是不可修改的(从C继承),因此标准说非类类型的右值永远不是const限定的(即使你指定了最右边的const也被忽略了),因为const有点多余.一个人不写-例子:intf();intmain(){f()=0;}//erroranyway!
考虑以下程序:intmain(){intarray[9];constint(*p2)[9]=&array;}它在C++中编译良好(参见现场演示here),但在C中编译失败。默认情况下,GCC会给出以下警告。(见现场演示here)。prog.c:Infunction'main':prog.c:4:26:warning:initializationfromincompatiblepointertype[enabledbydefault]constint(*p2)[9]=&array;但如果我使用-pedantic-errors选项:gcc-Os-s-Wall-std=c11-pedanti
考虑以下程序:intmain(){intarray[9];constint(*p2)[9]=&array;}它在C++中编译良好(参见现场演示here),但在C中编译失败。默认情况下,GCC会给出以下警告。(见现场演示here)。prog.c:Infunction'main':prog.c:4:26:warning:initializationfromincompatiblepointertype[enabledbydefault]constint(*p2)[9]=&array;但如果我使用-pedantic-errors选项:gcc-Os-s-Wall-std=c11-pedanti
我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义:classA{A();};A::A::A(){}^^^请注意,这也适用于方法,尽管它在声明被过度限定时被标记。问题:这是一个有效的C++程序吗?如果是这样,它的用途是什么-还是仅仅是副产品?更新详情:如果最初的问题不清楚或太短:我很好奇为什么定义上允许有多余的限定词(上面还添加了强调)。Clang一个Apple的GCC4.2+LLVM是编译器 最佳答案 是的,这是允许的(§9/2):Theclass-nameisalsoinsertedintothescopeoft
我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义:classA{A();};A::A::A(){}^^^请注意,这也适用于方法,尽管它在声明被过度限定时被标记。问题:这是一个有效的C++程序吗?如果是这样,它的用途是什么-还是仅仅是副产品?更新详情:如果最初的问题不清楚或太短:我很好奇为什么定义上允许有多余的限定词(上面还添加了强调)。Clang一个Apple的GCC4.2+LLVM是编译器 最佳答案 是的,这是允许的(§9/2):Theclass-nameisalsoinsertedintothescopeoft
我知道我可以使用platform.node()来获取我的计算机的网络名称:>>>importplatform>>>platform.node()'MyComputerName'但我真正想要的是类似于以下内容的东西:>>>get_full_network_domain_name()'MyComputerName.it.na.mycompany.com'这样的东西存在吗? 最佳答案 完全限定域名由socket.getfqdn()返回. 关于python-如何在Python中获取计算机的完全限
我知道我可以使用platform.node()来获取我的计算机的网络名称:>>>importplatform>>>platform.node()'MyComputerName'但我真正想要的是类似于以下内容的东西:>>>get_full_network_domain_name()'MyComputerName.it.na.mycompany.com'这样的东西存在吗? 最佳答案 完全限定域名由socket.getfqdn()返回. 关于python-如何在Python中获取计算机的完全限
出于记录目的,我想检索Python对象的完全限定类名。(完全限定的意思是类名,包括包名和模块名。)我知道x.__class__.__name__,但是有没有简单的方法来获取包和模块? 最佳答案 使用以下程序#!/usr/bin/envpythonimportfoodeffullname(o):klass=o.__class__module=klass.__module__ifmodule=='builtins':returnklass.__qualname__#avoidoutputslike'builtins.str'return