草庐IT

joined_union

全部标签

c++ - C 风格/C++ 正确性,struct/union/enum 标记是否与类型名称相同?

下面的MyStruct定义(标记MyStruct)和类型MyStruct的类型定义似乎完全可以被gcc(至少4.6.2)和g++编译。typedefstructMyStruct{inta;intb;}MyStruct;我的问题是:使用与类型名称相同的标签名称是否容易出错(在C和/或C++中)或风格不好?根据http://www.eetimes.com/discussion/programming-pointers/4024450/Tag-vs-Type-Names不是:I'veneverunderstoodwhytheyusedifferentnamesforthetagandthet

c++ - C++中 union 中的 'protected'有什么意义

protected成员或函数有什么用处?您不能从union继承,因此没有子节点可以访问它。它是提供功能用途还是仅仅因为移除它很麻烦而存在? 最佳答案 union中的protected变得完全等同于private,但这种允许不会造成任何损害并避免额外的特殊情况处理和额外的差异union和struct/class(在标准中一起描述)。老实说,我认为可以在union中使用protected只是为了不将第umteenth特殊情况添加到标准中;也许标准委员会甚至没有想到要区分这种行为,因为这是一个非常奇怪的极端情况,但按照目前的规定并没有什么

c++ - 使用 union 来代替强制转换是否定义明确?

今天早上我与一位同事讨论了检测字节顺序的“编码技巧”的正确性。诀窍是:boolis_big_endian(){union{inti;charc[sizeof(int)];}foo;foo.i=1;return(foo.c[0]==1);}对我来说,union的这种用法似乎是不正确的,因为设置一个union成员并读取另一个成员是not明确定义的。但我不得不承认,这只是一种感觉,我缺乏实际的证据来加强我的观点。这个技巧正确吗?谁在这里? 最佳答案 您的代码不可移植。它可能适用于某些编译器,也可能不适用。当您尝试访问union的非事件成员

c++ - pthread - 如何在不调用 join 的情况下开始运行新线程?

我想从主线程开始一个新线程。我不能使用join,因为我不想等待线程退出然后继续执行。基本上我需要的是pthread_start(...)之类的东西,但是找不到。编辑:由于所有答案都建议create_thread应该启动线程,问题是在下面的简单代码中它不起作用。下面程序的输出是“主线程”。似乎子线程从未执行过。知道我哪里错了吗?在Fedora14GCC版本4.5.1上编译和运行void*thread_proc(void*x){printf("subthread.\n");pthread_exit(NULL);}intmain(){pthread_tt1;intres=pthread_cr

c++ - 您可以将一个 union 成员的值(value)分配给另一个 union 成员吗?

考虑以下代码片段:union{inta;floatb;};a=/*...*/;b=a;//isthisUB?b=b+something;将一个union成员分配给另一个union成员是否有效? 最佳答案 不幸的是,我认为这个问题的答案是C++中未指定union操作,尽管自分配完全没问题。自赋值是明确定义的行为,如果我们查看草案C++标准部分1.9程序执行段落15有以下示例:voidf(int,int);voidg(inti,int*v){i=v[i++];//thebehaviorisundefinedi=7,i++,i++;//i

c++ - boost::range::join 用于多个范围

我想做以下事情:std::vectora={1,2,3},b={4,5,6},c={7,8,9};for(auto&&i:join(a,b,c)){i+=1std::cout2345678910}我尝试使用boost::range::join,效果很好:autor=boost::join(a,b);for(auto&&i:boost::join(r,c)){i+=1;std::cout2345678910}链式连接,读取操作工作:for(auto&&i:boost::join(boost::join(a,b),c))std::cout123456789但是,写作不起作用:for(aut

c++ - boost:algorithm::join() 可以连接一个 float 容器吗?

Boost连接可用于连接字符串容器,可选地由分隔符字符串分隔,如下例所示:Agoodexampleforboost::algorithm::join我的STL技能很弱。我想知道是否有任何方法可以对数字容器(float、double、整数)使用相同的函数?似乎应该有一些一两行来适应其他类型。还有STL的复制功能,这里有一个很好的例子:Howtoprintoutthecontentsofavector?但我不喜欢它在每个元素之后添加分隔符字符串的方式。我只想使用boost。 最佳答案 当然,您可以结合boost::algorithm::

c++ - 有没有办法在 C++ 中实现 Python 的 'separator' .join() 的模拟?

我发现的只是boost::algorithm::string::join。但是,仅将Boost用于连接似乎有点过头了。那么也许有一些久经考验的食谱?更新:抱歉,问题标题不好。我正在寻找用分隔符连接字符串的方法,而不仅仅是一个接一个地连接。 最佳答案 既然您正在寻找食谱,请继续使用Boost中的食谱。一旦你克服了所有的通用性,它就不会太复杂了:分配存储结果的位置。将序列的第一个元素添加到结果中。虽然还有其他元素,但将分隔符和下一个元素附加到结果中。返回结果。这是一个适用于两个迭代器的版本(与Boost版本相反,它在一个范围上运行。te

c++ - 使用带有 unique_ptr 的 union

当我尝试std::move或std::make_unique时,尝试在union中使用unique_ptr会给我一个段错误。#include#includeunionmyUnion{struct{std::unique_ptrupFloat;}structUpFloat;struct{std::unique_ptrupInt;}structUpInt;myUnion(){}~myUnion(){}};structmyStruct{intx;myUnionnum;};intmain(){myStructaStruct,bStruct;aStruct.x=1;bStruct.x=2;aut

c++ - 为什么 glm::vec 将 vec 值表示为 union ?

我在看vec4glm的源代码实现,我想知道为什么它们用union表示vector值,而不是像float这样的原始数据类型或int?这是我在vec4中找到的代码实现:union{Tx,r,s;};union{Ty,g,t;};union{Tz,b,p;};union{Tw,a,q;};如果我们只写Tx有什么区别?,Ty,Tz,Tw? 最佳答案 因为vec4通常用于:空间坐标x、y、z、w颜色组件r、g、b、a纹理坐标s、t、p、q(虽然这些不太标准化,而且我我们还看到了r和u在不同的上下文中使用)使用union允许使用访问例如第二个数