草庐IT

c++ - C/C++ 位域与按位运算符区分位,哪个更快、更好、更便携?

我需要以这种方式将一些位打包到一个字节中:struct{charbit0:1;charbit1:1;}a;if(a.bit1)/*etc*/或:if(a&0x2)/*etc*/从源代码的清晰度来看,我很明显位域更整洁。但是哪个选项更快?我知道速度差异不会太大,但我可以使用其中任何一个,如果一个更快,更好。另一方面,我了解到位域不能保证跨平台以相同的顺序排列位,我希望我的代码是可移植的。注意:如果您打算回答“个人资料”,我会,但由于我很懒,如果有人已经有答案,那就更好了。代码可能是错误的,如果您愿意,可以纠正我,但请记住这个问题的意义,并请尝试回答。 最佳答案

c++ - 将 std::tr1 导入 std - 合法吗?它是否提高了便携性?

我的C++03代码如下所示:#include...std::tr1::unordered_mapmystuff;...我开始怀疑如果/当我将代码转换为C++11(我猜)没有std::tr1::unordered_map但有std::unordered_map代替。所以我想出了以下技巧:namespacestd{usingnamespace::std::tr1;}...std::unordered_mapmystuff;//notr1now!...是否合法(也许禁止将内容导入到std中)?它会让移植/与C++11代码互操作变得更容易吗? 最佳答案

c++ - 向任何指针添加字节偏移的便携且安全的方法

我是C++的新手,还没有掌握该语言的所有复杂性和微妙之处。在C++11中向任何类型的指针添加任意字节偏移量的最可移植、正确和安全的方法是什么?SomeType*ptr;intoffset=12345/*bytes*/;ptr=ptr+offset;//我在StackOverflow和Google上找到了很多答案,但它们都提出了不同的建议。我遇到的一些变种:Casttochar*:ptr=(SomeType*)(((char*)ptr)+offset);转换为unsignedint:ptr=(SomeType*)((unsignedint)ptr)+offset);Casttosize_

c++ - GCC 7,-Wimplicit-fallthrough 警告,以及清除它们的便携方式?

我们正在捕获来自GCC7的警告,即在switch语句中隐式失败。以前,我们在Clang下清除了它们(这就是下面评论的原因):g++-DNDEBUG-g2-O3-std=c++17-Wall-Wextra-fPIC-cauthenc.cppasn.cpp:Inmemberfunction‘voidEncodedObjectFilter::Put(constbyte*,size_t)’:asn.cpp:359:18:warning:thisstatementmayfallthrough[-Wimplicit-fallthrough=]m_state=BODY;//fallthrough^a

c++ - 如何便携地找出 min(INT_MAX, and(INT_MIN))?

我怎样才能便携地找出INT_MAX和abs(INT_MIN)中的最小值?(这是INT_MIN的数学绝对值,而不是对abs函数的调用。)它应该与大多数系统中的INT_MAX相同,但我正在寻找一种更便携的方式。 最佳答案 而典型值为INT_MIN为-2147483648,典型值为INT_MAX是2147483647,标准不保证。TL;DR:您要搜索的值是INT_MAX在符合要求的实现中。但是计算min(INT_MAX,abs(INT_MIN))不便携。INT_MIN的可能值和INT_MAXINT_MIN和INT_MAX由附件E(实现限制

c++ - 将 NULL/0 传递给 dynamic_cast 的便携安全?

出于检查空指针的习惯,我有时会写:MyClass*c=someBasePtr?dynamic_cast(someBasePtr):0;if(c){...实际上,在传递给动态转换之前检查空指针,并检查返回。然后我阅读了MSDN文档Anullpointervalueisconvertedtothenullpointervalueofthedestinationtypebydynamic_cast.看来我可以安全地删除?:构造。这是C++便携吗?这样新的代码会是MyClass*c=dynamic_cast(someBasePtr);if(c){...当然假设someBasePtr为null或

c++ - 如何简洁、便携和彻底地播种 mt19937 PRNG?

我似乎看到很多答案,其中有人建议使用生成随机数,通常与这样的代码一起使用:std::random_devicerd;std::mt19937gen(rd());std::uniform_int_distributiondis(0,5);dis(gen);通常这会取代某种“邪恶的可憎之物”,例如:srand(time(NULL));rand()%6;我们可能会criticize通过争论time(NULL)的老方法提供低熵,time(NULL)是可预测的,最终结果是不一致的。但新方式的所有这些都是真实的:它只是有一个更Shiny的饰面。rd()返回单个unsignedint.这至少有16位

cross-platform - 在 go/golang 中表示换行符的最便携/跨平台的方式是什么?

目前,为了表示go程序中的换行符,我使用\n。例如:packagemainimport"fmt"funcmain(){fmt.Printf("%dis%s\n",'U',string(85))}...将产生85isU后跟换行符。但是,这似乎并不是跨平台的。看看其他语言,PHP用一个全局常量(PHP_EOL)来表示它。\n是在go/golang中以跨平台特定方式表示换行符的正确方法吗? 最佳答案 我对此很好奇,所以决定看看fmt.Println究竟做了什么。http://golang.org/src/pkg/fmt/print.go如

cross-platform - 在 go/golang 中表示换行符的最便携/跨平台的方式是什么?

目前,为了表示go程序中的换行符,我使用\n。例如:packagemainimport"fmt"funcmain(){fmt.Printf("%dis%s\n",'U',string(85))}...将产生85isU后跟换行符。但是,这似乎并不是跨平台的。看看其他语言,PHP用一个全局常量(PHP_EOL)来表示它。\n是在go/golang中以跨平台特定方式表示换行符的正确方法吗? 最佳答案 我对此很好奇,所以决定看看fmt.Println究竟做了什么。http://golang.org/src/pkg/fmt/print.go如