在我们的C++课程中,他们建议不再在新项目中使用C++数组.据我所知,Stroustroup本人建议不要使用数组.但是有显着的性能差异吗?
我知道一点C,现在我正在看看C++.我习惯使用char数组来处理C字符串,但是当我看到C++代码时,我看到有使用字符串类型和字符串数组的示例:
#include <iostream>
#include <string>
using namespace std;
int main () {
string mystr;
cout << "What's your name? ";
getline (cin, mystr);
cout << "Hello " << mystr << ".\n";
cout << "What is your favorite team? ";
getline (cin, mystr);
cout << "I like " << mystr << " too!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
#include <iostream>
using namespace std;
int main () {
char name[256], title[256];
cout << "Enter your name: ";
cin.getline (name,256);
cout << "Enter your …Run Code Online (Sandbox Code Playgroud) 我已经看到了这两种风格的代码,我不确定一个是否比另一个更好(它只是风格问题)?你有什么建议可以选择一个而不是另一个.
//Example1
class Test {
private:
static const char* const str;
};
const char* const Test::str = "mystr";
//Example2
class Test {
private:
static const std::string str;
};
const std::string Test::str ="mystr";
Run Code Online (Sandbox Code Playgroud) 如果我有一个指向字符串变量的指针,array of chars那么键入是否有区别:
char *name = "name";
Run Code Online (Sandbox Code Playgroud)
和,
string name = "name";
Run Code Online (Sandbox Code Playgroud) 我是来自C#的C++的新手,但我确实更喜欢C++.
我有一个抽象类,定义了两个常量字符串(不是静态的).我想知道是否const char*会有更好的选择.我仍然掌握着C++标准,但我只是觉得在这种特殊情况下我没有任何理由需要使用std :: string(没有追加或编辑字符串,只是写入控制台通过printf).
我应该坚持std::string每一个案例吗?
我需要对我要问的问题进行深入的技术解释,而不是解决方案。
我已经学习了一个星期的指针,我理解得很好。但是在编写程序时,我偶然发现了这个错误:
无法将参数“2”的“const std::string”转换为“const char*”到“char* strcpy(char*, const char*)”
所以我很容易地解决了string.c_str()没有问题。但我对为什么会这样很感兴趣。我一直在疯狂地寻找为什么 const 字符串与constchar * 不同。当人们解释一个字符串时,他们说它与 char * 没有什么不同,那么为什么在字符串之前添加一个 const 不会使它成为一个const char *?
我想在我的cpp文件中的多个位置使用字符串常量.我应该使用std :: string还是char []?
static const std::string kConstantString = "ConstantStringValue";
static const char kConstantString[] = "ConstantStringValue";
Run Code Online (Sandbox Code Playgroud)
我被告知更喜欢后者,因为它"避免静态分配".char数组是否也必须静态分配?
我正在开发一个应用程序,其核心代码库将是Windows,iOS和Android的跨平台.
我的问题是:我应该如何在内部表示此应用程序使用的字符串,以便能够在所有三个平台上有效地使用它们?
值得注意的是,我在Windows中大量使用DirectWrite,其中API函数通常期望传递wchar_t*(顺便说一句,API文档声明"指向Unicode字符数组的指针.",我不是知道这是否意味着它们是否采用UTF-16编码)
我看到了三种不同的方法(但是我发现很难掌握使用C++以跨平台方式处理Unicode字符串的细节,所以也许我会错过一些重要的概念):
什么是最好的解决方案?顺便说一句,是否有任何现有的跨平台库抽象字符串处理?(以及读取和序列化Unicode字符串)
(更新:删除了有关char*和std :: string差异的问题的部分.)
我在c ++中看过char*vs std :: string,但我仍然想知道访问a的元素char*是否比快std::string.
如果您需要知道,char*/ std::string将包含少于80个字符,但我想知道如果有一个截止值.
如果存在差异,我也想知道不同编译器和不同操作系统对这个问题的答案.
提前致谢!
编辑:我将使用array[n],访问元素,并将值设置一次.
(注意:如果这不符合帮助中心的要求,请告诉我如何在投票之前重新改写它)
假设我正在设计一个接口,以返回子类的名称.请注意,对于子类的不同实例,它们的名称应保持不变.
为了提高速度和内存效率,我想说第三种方法签名可能是最好的(根据char*vs cd中的std :: string的一些注释)
virtual const std::string& name2() const = 0;
Run Code Online (Sandbox Code Playgroud)
我想知道有更好的选择吗?
#include <cstdio>
#include <string>
class baby_interface {
public:
virtual const char* name0() const = 0;
virtual std::string name1() const = 0;
virtual const std::string& name2() const = 0;
};
class baby : public baby_interface {
public:
virtual const char* name0() const
{
return "My Baby";
}
virtual std::string name1() const
{
return "My Baby";
}
virtual const std::string& name2() const
{
return std::string("My Baby");
} …Run Code Online (Sandbox Code Playgroud) 我是c ++的新手,我想从一开始就知道,
这些制作字符串的方法是否完全以相同的方式工作,并且在每种情况下始终给出完全相同的结果?他们中的任何一个结果有什么不同吗?
1) char greeting [6] = { 'h','e','l','l','o','\0' };
2) char greeting[] = "hello";
3) #include <string>
string greeting = "hello";
Run Code Online (Sandbox Code Playgroud)