草庐IT

限定词

全部标签

c++ - 函数的引用限定符有什么实际用例吗?

最近我了解了函数的引用限定符,例如structfoo{voidbar(){}voidbar1()&{}voidbar2()&&{}};我可能需要这个功能的地方,这个语言功能有什么实际用例吗? 最佳答案 WhereImightneedthisfeature,isthereanyrealusecaseforthislanguagefeature?您展示的示例非常无用,当您有一个重载函数时它更有用,一个对左值操作的版本和一个对右值操作的版本。考虑一个有点像std::stringstream的类型,它拥有一个字符串并按值返回它。如果对象是右

c++ - 函数的引用限定符有什么实际用例吗?

最近我了解了函数的引用限定符,例如structfoo{voidbar(){}voidbar1()&{}voidbar2()&&{}};我可能需要这个功能的地方,这个语言功能有什么实际用例吗? 最佳答案 WhereImightneedthisfeature,isthereanyrealusecaseforthislanguagefeature?您展示的示例非常无用,当您有一个重载函数时它更有用,一个对左值操作的版本和一个对右值操作的版本。考虑一个有点像std::stringstream的类型,它拥有一个字符串并按值返回它。如果对象是右

c++ - C++ 中 CV 限定的基类

在重构一些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

c++ - C++ 中 CV 限定的基类

在重构一些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

c++ - 为什么返回类型上的类型限定符没有意义?

假设我有这个例子:charconst*constfoo(){/*whichisinitializedtoconstchar*const*/returnstr;}避免编译器警告“返回类型的类型限定符没有意义”的正确方法是什么? 最佳答案 你写它的方式是说“返回的指针值是const”。但是非类类型的右值是不可修改的(从C继承),因此标准说非类类型的右值永远不是const限定的(即使你指定了最右边的const也被忽略了),因为const有点多余.一个人不写-例子:intf();intmain(){f()=0;}//erroranyway!

c++ - 为什么返回类型上的类型限定符没有意义?

假设我有这个例子:charconst*constfoo(){/*whichisinitializedtoconstchar*const*/returnstr;}避免编译器警告“返回类型的类型限定符没有意义”的正确方法是什么? 最佳答案 你写它的方式是说“返回的指针值是const”。但是非类类型的右值是不可修改的(从C继承),因此标准说非类类型的右值永远不是const限定的(即使你指定了最右边的const也被忽略了),因为const有点多余.一个人不写-例子:intf();intmain(){f()=0;}//erroranyway!

c++ - 在 C 和 C++ 中使用 const 限定符指向数组的指针

考虑以下程序: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

c++ - 在 C 和 C++ 中使用 const 限定符指向数组的指针

考虑以下程序: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

c++ - 为什么编译器支持冗余范围限定,它是否合法?

我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义:classA{A();};A::A::A(){}^^^请注意,这也适用于方法,尽管它在声明被过度限定时被标记。问题:这是一个有效的C++程序吗?如果是这样,它的用途是什么-还是仅仅是副产品?更新详情:如果最初的问题不清楚或太短:我很好奇为什么定义上允许有多余的限定词(上面还添加了强调)。Clang一个Apple的GCC4.2+LLVM是编译器 最佳答案 是的,这是允许的(§9/2):Theclass-nameisalsoinsertedintothescopeoft

c++ - 为什么编译器支持冗余范围限定,它是否合法?

我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义:classA{A();};A::A::A(){}^^^请注意,这也适用于方法,尽管它在声明被过度限定时被标记。问题:这是一个有效的C++程序吗?如果是这样,它的用途是什么-还是仅仅是副产品?更新详情:如果最初的问题不清楚或太短:我很好奇为什么定义上允许有多余的限定词(上面还添加了强调)。Clang一个Apple的GCC4.2+LLVM是编译器 最佳答案 是的,这是允许的(§9/2):Theclass-nameisalsoinsertedintothescopeoft