草庐IT

months3char

全部标签

c++ - char 数组作为 placement new 的存储

以下是否具有明确定义的行为的合法C++?classmy_class{...};intmain(){charstorage[sizeof(my_class)];new((void*)storage)my_class();}或者由于指针转换/对齐方面的考虑,这是有问题的吗? 最佳答案 是的,这是有问题的。您根本无法保证内存正确对齐。虽然存在各种技巧来获得正确对齐的存储,但您最好使用Boost或C++0x的aligned_storage,它们对您隐藏了这些技巧。那么你只需要://C++0xtypedefstd::aligned_stora

c++ - reinterpret_cast<char *> 是 reinterpret_cast 的唯一有效用法吗?

我最近了解到C++标准包含“严格的别名规则”,它禁止通过不同类型的变量引用相同的内存位置。但是,该标准确实允许char类型合法地别名任何其他类型。这是否意味着reinterpret_cast只能合法地用于转换为char*或char&类型?我相信严格的别名允许在继承层次结构中的类型之间进行转换,但我认为这些情况倾向于使用dynamic_cast?谢谢 最佳答案 reinterpret_cast有许多不同的用途。cppreferencepage列出了11个不同的案例。我猜你只是在询问情况5和6:将T*转换为U*,并将T转换为你&.在这些

C++: "my text"是 std::string、*char 还是 c 字符串?

我刚刚做了看起来是acommonnewbiemistake的事情:首先我们阅读oneofmanytutorials是这样的:#includeintmain(){usingnamespacestd;ifstreaminf("file.txt");//(...)}其次,我们尝试在我们的代码中使用类似的东西,它是这样的:#includeintmain(){usingnamespacestd;std::stringfile="file.txt";//Orgetthenameofthefile//fromafunctionthatreturnsstd::string.ifstreaminf(fi

c++ - 如何创建 const char* 的静态 const 数组

我尝试了以下行:staticconstconstchar*values[];但我在VC++警告C4114上收到以下警告:sametypequalifierusedmorethanonce.什么是正确的声明?目标是创建一个不可变的C字符串数组。 最佳答案 您编写了constconst而不是staticconstchar*constvalues[];(您将指针和基础值定义为const)另外,你需要初始化它:staticconstchar*constvalues[]={"字符串一","字符串二"};

c++ - const char * 上的析构函数

在我的程序中,我有这样一行:constchar*str=getStr();我是否需要在函数末尾调用str[]上的析构函数以防止内存泄漏? 最佳答案 问题没有包含足够的信息来告诉你,这取决于getStr()做了什么。例如:constchar*getStr(){return"boo";}那么你不能调用delete。constchar*getStr(){returnnewchar;}那么您应该调用deletestr;以避免内存泄漏(并且不得调用delete[])。constchar*getStr(){returnnewchar[10];}

C++ std::string 和 NULL const char*

我正在使用C++编写两段大代码,一段以“C风格”完成,另一段以“C++风格”完成。C类型代码具有返回constchar*的函数,而C++代码在很多地方都有类似constchar*somecstylefunction();...std::stringimacppstring=somecstylefunction();它从C样式代码返回的constchar*构造字符串。这一直有效,直到C风格代码发生变化并开始有时返回NULL指针。这当然会导致段错误。周围有很多代码,所以我想以最简洁的方式解决这个问题。在这种情况下,预期的行为是imacppstring将是空字符串。是否有一个很好的、巧妙的解

c++ - 在 C++ 中比较 char 数组的值

我在程序中做某事时遇到问题。我有一个保存人名的char[28]数组。我还有另一个char[28]数组,它也保留名称。我要求用户为第一个数组输入名称,第二个数组从二进制文件中读取名称。然后我将它们与==运算符进行比较,但即使名称相同,在调试时它们的值看起来也不同。为什么会这样?我如何比较这两者?我的示例代码如下:intmain(){charsName[28];cin>>sName;//Getthenameofthestudenttobesearched///Readingthetablesifstreamin("students.bin",ios::in|ios::binary);stu

c++ - 为什么不能将 TCHAR* 转换为 char*

错误C2664:“strcpy”:无法将参数1从“TCHAR*”转换为“char*”代码:LPCTSTRname,DWORDvaluestrcpy(&this->valueName[0],name);错误C2664:“strlen”:无法将参数1从“LPCTSTR”转换为“constchar*”LPCTSTRname;strlen(name)上面的代码在另一个项目中工作正常,我找不到它在这个MSVS2010项目中不起作用的原因。 最佳答案 您需要使用类似wcstombs的函数定义_UNICODE时。或者只是使用_tcslen(在Ge

c++ - 从 "const char*"到 "char"错误的无效转换

这个问题在这里已经有了答案:invalidconversionfrom‘constchar*’to‘char’(2个答案)关闭5年前。我想发布这个是因为我不太确定我在使用简单的赋值语句时遇到了什么问题。我正在做一个家庭作业,要求我在一个简单的程序中编写结构和函数来绘制ASCII字符的形状。现在我只是想测试我编写的函数,我正在尝试为Circle结构的符号元素赋值,只是为了测试我编写的DrawShape函数。当我尝试为其分配一个*字符时,我收到一条错误消息,指出“错误:从‘constchar*’到‘char’的无效转换”。我会把整个代码放进去,虽然它很长而且还没有完成。对此有任何帮助,我们

c++ - const char* 初始化

这是我在一个开源软件中找到的一种用法,我不太明白它是如何工作的。当我将它输出到标准输出时,它是“版本0.8.0”。constcharversion[]="version""0"".""8"".""0"; 最佳答案 这称为字符串连接——当您在源代码中将两个(或更多)带引号的字符串彼此相邻放置且它们之间没有任何内容时,编译器会将它们放在一起成为一个字符串。这最常用于长字符串——任何超过一行的字符串:charwhatever[]="thisisthefirstlineofthestring\n""thisisthesecondlineof