草庐IT

c++ - 为什么由 const 限定的变体成员组成的 union 会导致没有默认的默认构造函数?

N4567的标准草案建议将默认的默认构造函数定义为删除,如果——根据12.1,第4段:Xisaunionandallofitsvariantmembersareofconst-qualifiedtype(orarraythereof),换句话说,这相当于说,如果其变体成员之一不是const限定的,则上述规则不适用。我的问题是:让它的所有成员都具有const限定有什么特别之处(与至少其中一个成员没有const限定的相反情况相比),从什么角度来看它是密切相关的到默认的默认构造函数? 最佳答案 假设您有一个只有const成员的union:

c++ - C++ 中的非限定查找

#include#include#includenamespace/*namespacenamegeneratedbycompiler*/{structBB{};}structAA{};namespacemy{inlinevoid*memcpy(void*,constvoid*,std::size_t){puts("CUSTOMIMPLEMENTATION");return0;}}namespacemy{voidfunc(){AAa;memcpy(&a,&a,sizeof(a));//ambigiouscallforg++4.7-g++6.2BBb;memcpy(&b,&b,sizeo

c++ - 派生类中的虚拟限定符

派生类中基类的虚函数的虚限定符有什么区别吗?classb{public:virtualvoidfoo(){}};classd:publicb{public:voidfoo(){....}};或classd:publicb{public:virtualvoidfoo(){....}};除了让d的child知道foo()的虚拟性之外,这两个声明有什么区别吗? 最佳答案 没有区别。foo在派生自b(及其后代)的所有类中都是虚拟的。来自C++03标准,§10.3.2:Ifavirtualmemberfunctionvfisdeclaredi

c++ - 如何在 c++1y 的返回类型推导中保留 cv 限定符或引用?

首先,我构建了四个结构,每个结构都返回值、左值引用、const左值引用、右值引用。我在包装器(B或C)中使用它们,在这些包装器的方法func()中,我想保留A的func()的引用和cv限定符。在C++11中,我使用了尾随返回类型。但随着c++14中正常返回类型推导的到来,我猜我可以跳过尾部,但只有auto,返回类型像普通一样忽略限定符和引用自动。然后,我的问题是在c++14中实现它的最佳方法是什么,它的行为就像下面的类B一样?当它很琐碎时,写尾部(通常是decltype(returnexpression))有时会令人沮丧。structA1{intfunc(){returnx;}intx

C++11: "auto"关键字是否完全检索 cv 限定符?我有矛盾的样本

我有如下程序:structA{inti;};intmain(){constinti=0;autoai=i;ai=2;//OKconstAbuf[2];for(auto&a:buf){a.i=1;//error!}std::cout第一个autoai=i;没有问题,好像auto没有检索c/v限定符,因为ai可以修改的但是for循环编译失败——错误:成员A::i在只读对象中的赋值我知道auto不会检索&功能,我的问题是:auto是否像我的情况一样检索c/v限定符?我的测试程序似乎给出了相互矛盾的提示。 最佳答案 你在这里复制ai,而不是

c++ - 可以使用 `std` 命名空间来限定 C 函数吗?

这个问题在这里已经有了答案:WhenusingCheadersinC++,shouldweusefunctionsfromstd::ortheglobalnamespace?(8个答案)关闭6年前。当我使用从C继承的函数时,如中的函数或,我是否应该将它们限定为标准命名空间的一部分std::log,还是应该留在C范围内并将它们用作全局函数?怎么样size_t?

c++ - 数字常量之前的预期非限定 ID

templateclassWrap{//stuffs};如果我将模板实例化为Wrap4>p;有什么问题??我收到expectedunqualified-idbeforenumericconstant错误。如何解决这个问题? 最佳答案 更改Wrap4>p;至Wrap4)>p;第一个>encountered被视为模板参数列表的末尾,而不是大于运算符>ISOC++[14.2/3]Whenparsingatemplate-id,thefirstnon-nested>istakenastheendofthetemplateargument-l

C++ 良好的编码风格 - 总是完全限定库类型?

在使用标准库类型的C++中,什么通常被认为是好的编码风格?例如,如果我有一个usingnamespacestd;指令,您是否仍然希望看到像这样完全限定的库类型:std::string还是仅使用就可以接受string作为类型标识符?如果你完全符合条件,你能解释一下背后的理由吗? 最佳答案 在头文件中完全限定。在.cpp文件中导入命名空间。防止全局命名空间被简单的#include弄得乱七八糟 关于C++良好的编码风格-总是完全限定库类型?,我们在StackOverflow上找到一个类似的问题

c++ - 为什么 `precise`限定符不生效?

我正在尝试改进HenryThasler的GLSL双单算法实现(来自他的GLSLMandelbrot演示),以便在Linux上的NVIDIA图形上可靠地工作。我最近了解到,自从OpenGL4.0(§4.7ThePreciseQualifierinthespec)或GL_ARB_gpu_shader5扩展(spec)我们可以使用precise使计算遵循GLSL源中指定的精确算术运算序列的限定符。但是下面的尝试似乎并没有带来任何改善:#version330#extensionGL_ARB_gpu_shader5:requirevec2ds_add(vec2dsa,vec2dsb){preci

c++ - 限制 C 中的限定符与 LLVM IR 中的 noalias 属性

我的问题与C中的restrict限定符和LLVM中的noalias属性用作函数参数时的不同语义有关。根据LLVMdocumentationfornoalias:Thisindicatesthatobjectsaccessedviapointervaluesbasedontheargumentorreturnvaluearenotalsoaccessed,duringtheexecutionofthefunction,viapointervaluesnotbasedontheargumentorreturnvalue.如果是restrict限定符,C11(Example3,page124