草庐IT

c++ - char vs wchar_t vs char16_t vs char32_t (c++11)

据我了解,char可以安全地容纳ASCII字符,而char16_t和char32_t可以安全地容纳unicode中的字符,一个用于16位变体,另一个用于32位变体(我应该说“a”而不是“the”吗?)。但是我想知道wchar_t背后的目的是什么。我应该在新代码中使用该类型,还是只是为了支持旧代码?旧代码中wchar_t的目的是什么,据我所知,如果它的大小不能保证大于char?澄清一下就好了! 最佳答案 char用于8位代码单元,char16_t用于16位代码单元,char32_t用于32位代码单位。这些中的任何一个都可以用于“Uni

c++ - 如何检查给定的 c++ 字符串或 char* 是否仅包含数字?

或者反过来找第一个非数字字符。相同的函数适用于string和char*吗? 最佳答案 当然,有很多方法可以只测试字符串中的数字字符。两种可能的方法是:boolis_digits(conststd::string&str){returnstr.find_first_not_of("0123456789")==std::string::npos;}或boolis_digits(conststd::string&str){returnstd::all_of(str.begin(),str.end(),::isdigit);//C++11}

c++ - 未定义模板的隐式实例化 'std::basic_string<char, std::char_traits<char>, std::allocator<char>>'

在我一直在做的项目中,我们必须将Cocoa通知从C++子项目发送到它上面的主项目。为此,我们构建了一个映射来充当通知的userInfo字典的键值存储。在其中一个项目中,以下代码编译得很好:std::map*userInfo=newstd::map;charbuffer[255];sprintf(buffer,"%i",intValue1);userInfo->insert(std::pair("intValue1",std::string(buffer)));sprintf(buffer,"%i",intValue2);userInfo->insert(std::pair("intVa

c++ - 为什么不显示char数据的地址?

classAddress{inti;charb;stringc;public:voidshowMap(void);};voidAddress::showMap(void){cout输出是:addressofint:somethingaddressofchar://nothing,blankarea,thatisnothingdisplayedaddressofstring:something为什么?另外一件有趣的事:如果int、char、string是公开的,那么输出是...int:something...char:...string:something_2something_2-so

C++ - char** argv 与 char* argv[]

char**argv和char*argv[]有什么区别?在intmain(intargc,char**argv)和intmain(intargc,char*argv[])?它们是一样的吗?特别是第一部分没有[]. 最佳答案 它们是完全等价的。char*argv[]必须作为指向char的指针数组读取,并且数组参数被降级为指针,因此指向char的指针的指针>或char**.这与C中的相同. 关于C++-char**argv与char*argv[],我们在StackOverflow上找到一个类

c++ - char数组声明中字符串文字周围的大括号有效吗? (例如 char s[] = {"Hello World"})

我偶然发现chars[]={"HelloWorld"};行已正确编译,并且似乎与chars[]="Hello世界”;。第一个({"HelloWorld"})不是一个包含一个元素的数组,它是一个char数组,所以s的声明应该是char*s[]?事实上,如果我将其更改为char*s[]={"HelloWorld"};编译器也会像预期的那样接受它。寻找答案,我发现唯一提到这个的地方是thisone但没有引用标准。所以我的问题是,为什么行chars[]={"HelloWorld"};编译虽然左侧是arrayofchar类型和右边的类型是arrayofchar?以下是一个工作程序:#includ

c++ - 为什么 const char* const & = "hello"可以编译?

我正在阅读一本书的代码片段并发现:constchar*const&a="hello";//cancompileconstchar*&a="hello";//cannot我所知道的是,在初始化引用时,数组到指针的转换不会发生。constchar*const&,一个const指针的引用,指针指向constchar。constchar*&,一个pointer的引用,指针指向constchar.那为什么要多加一个const,表示指针是一个const,就可以编译呢? 最佳答案 它本质上是遵循这个公式Tconst&a=something_con

c++ - cout << with char* 参数打印字符串,而不是指针值

这个:constchar*terry="hello";cout打印hello而不是'h'的内存地址。为什么会这样? 最佳答案 原因是std::cout将处理char*作为指向C样式字符串(的第一个字符)的指针并按原样打印。如果你想要address代替,你可以将它转换为一个不那样处理的指针,例如:cout(如果您担心放弃constness,则使用constvoid*类型转换,在这种特殊情况下这不是问题)。如果你是一个纯粹主义者而不是实用主义者,你也可以使用C++static_cast,大致如下:cout(terry);虽然在这种特殊情

c++ - char* 和 std::uint8_t* 之间的 reinterpret_cast - 安全吗?

现在我们有时都必须使用二进制数据。在C++中,我们使用字节序列,并且从一开始char是我们的基石。定义为sizeof1,它是字节。并且所有库I/O函数都使用char默认。一切都很好,但总有一点问题,一些奇怪的问题困扰了一些人-一个字节中的位数是实现定义的。所以在C99中,决定引入几个typedef来让开发人员轻松表达自己,固定宽度的整数类型。当然是可选的,因为我们不想损害可移植性。其中,uint8_t,作为std::uint8_t迁移到C++11,一个固定宽度的8位无符号整数类型,对于真正想要使用8位字节的人来说是完美的选择。因此,开发人员接受了新工具并开始构建明确声明他们接受8位字节

c++ - 不推荐从字符串文字到 'char*' 的转换

我有一个程序,它声明一个字符串数组,如下所示:char*colors[4]={"red","orange","yellow","blue"};但我收到了上述编译器警告。它可以编译,但我宁愿使用不推荐的方式(如果有的话)。我试图找出它的含义,但我似乎无法弄清楚。我听说在'char'起作用之前使用'const',但如果有人能解释错误的含义会很有帮助。谢谢。 最佳答案 您输入的字符串:“red”、“organge”等是“literal”,因为它们是在程序代码本身内部定义的(它们不是直接从磁盘、用户输入/stdin等读取的)。这意味着,如果