草庐IT

c++ - 在初始化内存上使用 placement new 是否合法?

我正在探索在C++中实现真正(部分)不可变数据结构的可能性。由于C++似乎不区分变量和变量存储的对象,因此真正替换对象(无需赋值操作!)的唯一方法是使用placementnew:autovar=Immutable(state0);//thefollowingisillegalasitrequiresassignmentto//animmutableobjectvar=Immutable(state1);//however,thefollowingwouldworkasitconstructsanewobject//inplaceoftheoldonenew(&var)Immutable

c++ - 声明嵌套命名空间 `std` 是否合法 C++?

std命名空间在C++中是特殊的,所以...这是合法的C++吗?//atglobalscopenamespacemine{namespacestd{...}}我会称之为疯狂,但它被允许吗?标准中的引用(或非引用)将不胜感激。 最佳答案 在reservednames标准17.4.3.1(及其子段落)中,我找不到任何禁止使用std作为嵌套命名空间名称的内容。它不是宏,不在全局命名空间中,而且似乎不符合任何禁止它的“外部链接标准”。这似乎是合法的(尽管正如您所说的那样极其不可取)。 关于c++

c++ - 表达式 x---y 是如何解析的?是合法的表达方式吗?

如何解析表达式x---y?是合法的表达方式吗? 最佳答案 它是合法的,解析为x---y。我认为前两个减号被解释为后递减运算符,因为它是x之后合法出现的最长标记。这就剩下第三个减去起到减法的作用了。这符合最大数量规则[1][1]。http://en.wikipedia.org/wiki/Maximal_munch 关于c++-表达式x---y是如何解析的?是合法的表达方式吗?,我们在StackOverflow上找到一个类似的问题: https://stackov

c++ - 字符串 ; &s+1;合法的?乌布?

考虑以下代码:#include#include#include#include#includeusingnamespacestd;intmain(){stringmyAry[]={"Mary","had","a","Little","Lamb"};constsize_tnumStrs=sizeof(myStr)/sizeof(myAry[0]);vectormyVec(&myAry[0],&myAry[numStrs]);copy(myVec.begin(),myVec.end(),ostream_iterator(cout,""));return0;}这里感兴趣的是&myAry[nu

C++ 命名空间....匿名命名空间是合法的吗?

namespace{intFoo(inta);}像这样。这个代码片段合法吗?这合法吗?而且,我可以在任何地方引用Foo吗?还是只有某个域?谢谢。 最佳答案 这是合法的,你可以在同一个中的任何地方使用FooTranslationUnit。匿名命名空间是对变量声明static以将其范围限制在同一翻译单元的标准规定方式。C++03标准第7.3.1.1节未命名的命名空间第2段:Theuseofthestatickeywordisdeprecatedwhendeclaringobjectsinanamespacescope,theunname

c++ - 数据类型不完整的容器的迭代器是否合法?

下面的代码合法吗?classA{std::map::iteratorx;};VisualStudio2015接受它,但clang说.../ndk/sources/cxx-stl/llvm-libc++/libcxx/include/utility:254:9:error:fieldhasincompletetype'A'_T2second;^....a.cpp:52:21:note:definitionof'A'isnotcompleteuntiltheclosing'}'structA^编辑:问题似乎与标准库有关,http://rextester.com/QNNEG57036失败了我

c++ - Vulkan-hpp 正在将非标准布局类重新解释为另一个类。这是合法的吗?

最近我一直在使用Vulkan-Hpp(VulkanApi的官方c++绑定(bind),GithubLink)。查看源代码,我发现他们围绕原生Vulkan结构创建了包装器类(例如vk::InstanceCreateInfo围绕着VkInstanceCreateInfo)。(注意:环绕,而不是派生自)调用nativeVulkanAPI时,指向包装器类的指针被reinterpret_cast编辑到nativeVulkan结构中。使用vk::InstanceCreateInfo的示例://definitionofvk::InstanceCreateInfostructInstanceCreat

c++ - 什么合法代码可以触发 C4523 "multiple destructors specified"Visual C++ 警告?

根据MSDN,VisualC++可以发出C4523warning'class':指定了多个析构函数。怎么可能出现这种情况?我尝试了以下方法:classClass{~Class();~Class(int);};这会产生一个析构函数必须有一个'void'参数列表错误和C4523警告以及以下内容classClass{~Class();~Class();};这会产生成员函数已经定义或声明错误以及以下内容classClass{int~Class();~Class();};这会产生析构函数不能有返回类型错误。那么我如何有C4523警告但没有错误呢? 最佳答案

c++ - 在 union 成员初始化器列表中初始化多个重叠字段是否合法?

我有这个联盟:unionFoo{uint32_tu32;struct{uint32_ta:10;uint32_tb:10;uint32_tc:10;uint32_td:2;};Foo():a(0),b(1),c(2),d(3){}};我们有一个分析C++代码潜在错误的工具,它有一个误报,它认为在我写这篇文章时u32还没有被初始化。我发现VC++会让我写这个成员初始化列表:Foo():u32(0),a(0),b(1),c(2),d(3)它确实关闭了该工具,但它看起来……非常可疑。(根据评论编辑:GCC和Clang不会接受它,所以非常可疑似乎是有道理的。)对于结构,成员初始值设定项按其在结

c++ - 在 C++ 中,在 STL 容器中存储具有重载 "operator&"的类对象是否合法?

根据C++03标准(23.1/3),只有copy-constructible类对象可以存储在STL容器中。Copy-constructible在20.1.3中描述并且要求“&”产生对象的地址。现在假设我有这个类:classClass{public:Class*operator&(){//dosomeloggingreturnthis;}constClass*operator&()const{//dosomeloggingreturnthis;}//whateverelse-assumeitdoesn'tviolaterequierements};此类对象是否可以合法存储在STL容器中?