草庐IT

限定词

全部标签

c++ - 有没有办法构建 C++ 自定义限定符?

有没有办法实现自定义类型限定符(类似于const)?我想只允许在具有相同资格的函数中调用具有正确资格的函数。假设我会:voidallowedFunction();voiddisallowedFunction();//Onlyallowedtocallallowedfunctions.voidfoo(){allowedFunction();disallowedFunction();//Causecompiletimeerror}//Isallowedtocallanyfunctionitwants.voidbar(){allowedFunction();disallowedFunctio

c++ - 如何强制调用 const 限定函数重载?

我试图在类中调用const函数,但存在同名的非const函数。注意:我不能只更改名称。classMyQuestion{voidfun(){cout 最佳答案 选项#1:通过指向const限定类型的指针调用该函数:voidcall(){static_cast(this)->fun();//~~~~^}c++11:voidcall(){constauto*that=this;//~~^that->fun();}c++17:voidcall(){std::as_const(*this).fun();//~~~~~~~^}选项#2:使调用函

c++ - result_of 用于具有 cv 限定参数的成员对象

鉴于以下声明:structMyClass{};typedefintMyClass::*Mp;在我尝试过的gcc6.2和Clang编译器上,result_of::type产量int&&.我的问题总结:为什么int&&而不是constint&&或者干脆int?更多背景:标准规定result_of是这样定义的:themembertypedeftypeshallnamethetypedecltype(INVOKE(declval(),declval()...));该标准还以这种方式为指向成员对象的指针定义了INVOKE:—t1.*fwhenN==1andfisapointertodatamem

c++ - 为什么 std::remove_const 不删除 const 限定符?

请注意,我使用std::thread只是为了在错误中获得可读类型:intmain(){constint*first;usingderef=decltype(*first);std::threads=std::remove_const::type{};//constint???std::threads2=deref{};//constintstd::threads3=std::remove_const::type{};//int}好像remove_const::type是constint,不可变int正如我所料。 最佳答案 注意*fi

c++ - 在 C 中允许重复的 const 限定符但在 C++ 中不允许?

示例代码片段constconstconstintx=10;intmain(){}在C中编译,但不在C++中。为什么它会在C中编译?我认为这在C中也会失败。没关系。C++标准的哪一部分禁止使用重复的const,而C标准的哪一部分允许这样做? 最佳答案 C99§6.7.3/4:Ifthesamequalifierappearsmorethanonceinthesamespecifier-qualifier-list,eitherdirectlyorviaoneormoretypedefs,thebehavioristhesameasif

Java:导入语句与完全限定名称?

我已经尝试在网上和我自己的知识范围内找到这个问题的答案,但我似乎无法找到一个明确、明确的答案。假设我只使用了另一个包中的一个类,它只需要导入一次,比如myPack.anotherPackage.ClassName。使用import语句有什么区别(如果有):importmyPack.anotherPackage.ClassName;相对于使用完全限定名称:myPack.anotherpackage.ClassNameclassInst=newmyPack.anotherpackage.ClassName();?显然,这个问题只适用于ClassName只使用一次的情况。

java - 匹配全限定类名的正则表达式

在文本中匹配完全限定的Java类名的最佳方法是什么?示例:java.lang.Reflect、java.util.ArrayList、org.hibernate.Hibernate。 最佳答案 Java完全限定的类名(比如说“N”)具有结构N.N.N.N“N”部分必须是Java标识符。Java标识符不能以数字开头,但在初始字符之后可以使用字母和数字、下划线或美元符号的任意组合:([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*----------------------------

java - 为什么我得到一个枚举常量引用不能在 case 标签中被限定?

为什么下面的代码编译失败,同时将case语句改为caseENUM1:doSomeStuff();有效吗?publicenumEnumType{ENUM1,ENUM2,ENUM3;voiddoSomeStuff(){switch(this){caseEnumType.ENUM1:doSomeStuff();}}} 最佳答案 这是为了避免与不同枚举类型进行比较的能力。将其限制为one类型是有意义的,即switch语句中枚举值的类型。更新:其实是为了保持二进制兼容性。这是大约一半的引用chapter13.4.9JLS:Onereasonf

java - 使用未初始化的最终字段 - 带/不带 'this.' 限定符

有人可以向我解释为什么以下两个示例中的第一个可以编译,而第二个不可以吗?请注意,唯一的区别是第一个用'.this'明确限定了对x的引用,而第二个没有。在这两种情况下,最终字段x显然都在初始化之前尝试使用。我原以为两个样本会被完全平等对待,导致两者都出现编译错误。1)publicclassFoo{privatefinalintx;privateFoo(){inty=2*this.x;x=5;}}2)publicclassFoo{privatefinalintx;privateFoo(){inty=2*x;x=5;}} 最佳答案 经过大

java - 如何为 Spring 限定符实现 OR 逻辑?

我有以下配置:@Qualifier1@Qualifier2@BeanpublicMyBeanbean1(){...}@Qualifier2@Qualifier3@BeanpublicMyBeanbean2(){...}@Qualifier1@Qualifier2@Qualifier3@BeanpublicMyBeanbean3(){...}@Qualifier3@BeanpublicMyBeanbean4(){...}@Qualifier1@BeanpublicMyBeanbean5(){...}而且是注入(inject)的地方:@Qualifier2@Qualifier3@Autow