草庐IT

char_bit

全部标签

c++ - char16_t 字符串必须使用 UTF-16 编码吗?

我已经研究规范一段时间了,找不到任何结论性的条款来支持是/否。做如下语句:char16_t*s=u"asdf";暗示/强制字符串文字“asdf”必须以UTF-16编码?据我所能推断的,这是肯定的。但是,在这个提案中n2018它说只有当"__STDC_UTF_16__"被定义时char16_t文字是UTF-16编码的,所以当"__STDC_UTF_16__"未定义,char16_t文字可以按编译器的需要进行编码。毕竟,该标准只保证char16_t的大小、符号性和底层表示,它没有提到编译器必须如何编码char16_t文字或字符串字面意思。在规范中,它说Thesizeofachar16_ts

c++ - 将 std::string ** 转换为 char *** 它恰好可以工作。如何?

考虑以下代码:std::vectorfoo{{"blee"},{"bleck"},{"blah0000000000000000000000000000000000000000000000000000000000000000000000000000000000"}};std::string*temp=foo.data();char***bar=reinterpret_cast(&temp);for(size_ti=0;i显然这是粗略的代码,但它恰好有效。http://ideone.com/2XAJYR我想知道它为什么有效?是否有一些我不知道的C++奇怪规则?还是仅仅是糟糕的代码和未定义的

c++ - Const 正确性 : const char const * const GetName const (//stuff);

标记为家庭作业,因为这是我写的期中问题,但我不明白答案。我被要求在以下语句中解释每个const的用途:constcharconst*constGetName()const{returnm_name;};那么,每个常量的解释是什么? 最佳答案 从右边拿。;之前的那个告诉客户这是一个设计级别的常量,即它不会改变对象的状态。(将此视为只读方法。)好的,现在返回值:constcharconst*const这是一个指向okay的常量指针……我们开始吧!您有一个额外的const--一个语法错误。以下是等效的:constT或Tconst。如果你取

c++ - 如何从 char* 转换为 T*?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++Whenshouldweprefertouseatwochainedstatic_castoverreinterpret_cast哪个更好?static_cast(static_cast(buffer));或reinterpret_cast(buffer);其中buffer是char*(包含T类型值的内存块)。

c++ - 从 ‘void’ 到非标量类型的转换‘std::pair<std::basic_string<char, std::char_traits<char>

我在电子表格obj中有一堆对:std::stack>undoStack;我正在尝试弹出堆栈并将其分配给另一对:std::pairchange=spreadsheets.at(i).undoStack.pop();我收到这个错误:error:conversionfrom‘void’tonon-scalartype‘std::pair,std::allocator>,std::basic_string,std::allocator>>’requested这里出了什么问题? 最佳答案 stack::pop()返回void但您正试图将其分配

c++ - 将字节数组转换为位集

我有一个由随机数生成器生成的字节数组。我想将其放入STL位集中。不幸的是,Bitset似乎只支持以下构造函数:一串1和0,例如“10101011”一个无符号长整数。(我的字节数组会更长)我现在唯一能想到的解决办法就是逐位读取字节数组,做成一个由1和0组成的字符串。谁有更有效的解决方案? 最佳答案 是这样的吗?#include#includetemplatestd::bitsetbytesToBitset(uint8_t*data){std::bitsetb;for(inti=0;i>=1;//Movetonextbitinarray

c++ - 在 C++ 中命名 int 或 char 变量时, "n"或 "ch"前缀是常见前缀吗?

我目前正在浏览learncpp.com的C++教程,我看到他们的变量命名趋势是使用“n”前缀(即intnValue)和“ch”前缀为char变量(即charchOperation)命名int变量。这是不是我现在应该养成的行业普遍现象? 最佳答案 Isthissomethingthatiscommonplaceintheindustry?由于对somewhatmoreusefulconvention的误解,这种做法在二十或三十年前的Microsoft某些部门很常见。公司其他部分使用(标记变量表明它们的用途,在弱类型语言中,这有助于避免

c++ - operator const char* 以奇怪的方式覆盖(?)我的另一个变量

#include#includeclassVector{double_x;double_y;public:Vector(doublex,doubley):_x(x),_y(y){}doublegetX(){return_x;}doublegetY(){return_y;}operatorconstchar*(){std::ostringstreamos;os这个程序的输出:$./a.outVectorw1(1.1,2.2)Vectorw2(3.3,4.4)Vector(3.3,4.4)Vector(3.3,4.4)我不明白为什么会得到输出。似乎是“constchar*n2=w2;”覆盖

c++ - 奇数平台上的 std::byte

阅读HerbSutter关于最近C++标准session的博客文章,它注意到std::byte已添加到C++17。作为初步阅读,我有些担心,因为它使用unsignedchar来避免严格别名规则的复杂性。我最担心的是,它如何在CHAR_BIT不是8的平台上工作?我曾在/使用过CHAR_BIT为16或32的平台(通常是DSP)。鉴于std::byte用于处理“面向字节的内存访问”,并且大多数人将byte理解为指示八位字节(而不是底层字符类型的大小),这将如何工作对于希望这将解决连续8位内存块的个人?我已经看到有人假设CHAR_BIT是8(不知道CHAR_BIT存在...)。称为std::b

c++ - 多核CPU上32bit读的原子性

(注意:我根据我认为可能会提供帮助的人的位置为这个问题添加了标签,所以请不要大声喊叫:))在我的VS201764位项目中,我有一个32位长值m_lClosed。当我想更新它时,我使用了Interlocked函数系列之一。考虑这段代码,在线程#1上执行LONGlRet=InterlockedCompareExchange(&m_lClosed,1,0);//Setm_lClosedto1providedit'scurrently0现在考虑这段代码,在线程#2上执行:if(m_lClosed)//Dosomething我知道在单个CPU上,这不会成为问题,因为更新是原子的,读取也是原子的(