草庐IT

CHAR_LENGTH

全部标签

c++ - g++ 将返回的字符串文字视为 const char 指针而不是 const char 数组

当从一个应该使用g++(版本4.7.3)执行隐式转换的函数返回字符串文字时,我看到了一些奇怪的行为。谁能解释为什么下面的代码:#includeclassTest{public:templateTest(constchar(&foo)[N]){printf("Templateconstchararrayconstructor\n");}Test(char*foo){printf("char*constructor\n");}};Testfn(){return"foo";}intmain(){Testt("bar");Testu=fn();return0;}产生结果:Templatecon

c++ - C(和 C++)中 char 的对齐是否保证为 1?

这个问题在这里已经有了答案:Isthesizeofastructrequiredtobeanexactmultipleofthealignmentofthatstruct?(9个回答)关闭6年前。alignof(char)可以不是1吗?来自unofficialcppreference.comwiki:Theweakest(smallest)alignmentisthealignmentofthetypeschar,signedchar,andunsignedchar,anditisusually1.“通常”似乎暗示它可能是别的东西。C标准中关于char对齐的唯一规定是(C11N1570

c++ - C(和 C++)中 char 的对齐是否保证为 1?

这个问题在这里已经有了答案:Isthesizeofastructrequiredtobeanexactmultipleofthealignmentofthatstruct?(9个回答)关闭6年前。alignof(char)可以不是1吗?来自unofficialcppreference.comwiki:Theweakest(smallest)alignmentisthealignmentofthetypeschar,signedchar,andunsignedchar,anditisusually1.“通常”似乎暗示它可能是别的东西。C标准中关于char对齐的唯一规定是(C11N1570

游程编码(Run Length Coding)

游程编码游程编码基本介绍示例1示例2游程编码适用的场景游程编码游程编码(RunLengthCoding,简称RLC)又称游程编码、行程长度编码、变动长度编码等,是一种统计编码。主要技术是检测重复的比特或字符序列,并用它们的出现次数取而代之。比较适合于二值图像的编码,但是不适用于连续色调阁像的压缩,例如日常生活中的照片。为了达到较好的压缩效果,有时行程编码和其他一些编码方法混合使用。该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。对于二值图有效。该压缩编码技术相当直观和经济,运算也相当简单,因此解压缩速度很快。RLE压缩编码尤其适用于计算机生成的图形图像,对减少存储容量很有效果。RLC的基

c++ - unsigned char 在函数调用中自动提升为int,为什么?

为什么在调用函数时unsignedchar会自动提升为int?在下面的示例中,有一个f(int)和一个f(char)函数。编译器将unsignedchar参数强制为char并调用f(char)似乎更合乎逻辑,因为它们具有相同数量的位。它改为调用f(int),即使这意味着将参数提升为具有更多位的类型。任何指向规则定义位置的指针?标准还是编译器/平台特定?#includevoidf(intkey){std::cout产生这个输出:voidf(int)voidf(char)voidf(int) 最佳答案 因为unsignedchar不能用

c++ - unsigned char 在函数调用中自动提升为int,为什么?

为什么在调用函数时unsignedchar会自动提升为int?在下面的示例中,有一个f(int)和一个f(char)函数。编译器将unsignedchar参数强制为char并调用f(char)似乎更合乎逻辑,因为它们具有相同数量的位。它改为调用f(int),即使这意味着将参数提升为具有更多位的类型。任何指向规则定义位置的指针?标准还是编译器/平台特定?#includevoidf(intkey){std::cout产生这个输出:voidf(int)voidf(char)voidf(int) 最佳答案 因为unsignedchar不能用

C++:指向 std::string 转换的 char 指针是否复制内容?

当我使用构造函数将char*转换为std::string时:char*ps="Hello";std::stringstr(ps);我知道std容器在被要求存储值时倾向于复制值。是复制整个字符串还是仅复制指针?如果之后我执行str="Bye"是否会将ps更改为指向"Bye"? 最佳答案 std::string对象将分配内部缓冲区并将ps指向的字符串复制到那里。对该字符串的更改不会反射(reflect)到ps缓冲区,反之亦然。它被称为“深拷贝”。如果只复制指针本身而不复制内存内容,则称为“浅拷贝”。重申一下:std::string在这种

C++:指向 std::string 转换的 char 指针是否复制内容?

当我使用构造函数将char*转换为std::string时:char*ps="Hello";std::stringstr(ps);我知道std容器在被要求存储值时倾向于复制值。是复制整个字符串还是仅复制指针?如果之后我执行str="Bye"是否会将ps更改为指向"Bye"? 最佳答案 std::string对象将分配内部缓冲区并将ps指向的字符串复制到那里。对该字符串的更改不会反射(reflect)到ps缓冲区,反之亦然。它被称为“深拷贝”。如果只复制指针本身而不复制内存内容,则称为“浅拷贝”。重申一下:std::string在这种

c++ - 将 char 用于小整数 (C++)

我读到可以将“char”用于小整数。但是,当我尝试时,unsignedcharA=4;std::cout它给出一个字符,而不是4。 最佳答案 您正在经历的是运算符重载的影响。运算符假设当您将一个类型为char的变量传递给一个字符时,您很可能想要打印该字符。,因此它的行为与您对整数变量的预期不同。根据VivekGoel的建议你可以强制编译器选择你真正想要的重载:unsignedcharA=4;std::cout(A)附录:除非您在资源严重受限(尤其是内存很小)的环境中工作,否则您的优化是错误的。unsignedint上的操作通常比un

c++ - 将 char 用于小整数 (C++)

我读到可以将“char”用于小整数。但是,当我尝试时,unsignedcharA=4;std::cout它给出一个字符,而不是4。 最佳答案 您正在经历的是运算符重载的影响。运算符假设当您将一个类型为char的变量传递给一个字符时,您很可能想要打印该字符。,因此它的行为与您对整数变量的预期不同。根据VivekGoel的建议你可以强制编译器选择你真正想要的重载:unsignedcharA=4;std::cout(A)附录:除非您在资源严重受限(尤其是内存很小)的环境中工作,否则您的优化是错误的。unsignedint上的操作通常比un