我对字符串文字的数据类型感到困惑.是一个const char *还是一个const char?
根据C++标准,字符串文字类型是 array of const char
auto constStr = "aaa";
char* nonConstStr = constStr; //Error here, cannot convert from 'const char *' to 'char *'
char* stillNonConstStr = "aaa"; //Why I don't have error here?
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么在第3行我没有收到错误吗?
所以今天早些时候,我正在追赶好的旧C++,当我编译代码时,它无法正常工作.像一些程序员一样,我开始讨厌,并最终发现添加键盘const解决了这个问题.但是,我不喜欢黑客攻击很多,并且想要找出为什么代码在添加之后工作正常const.
这是我的代码之前添加const到构造函数:
#include <iostream>
#include <string>
using namespace std;
class Names {
private:
string _name;
string _surname;
public:
Names(string &name, string &surname) : _name(name), _surname(surname) {}
string getName() const {return _name;}
string getSurname() const {return _surname;}
};
int main(){
Names names("Mike", "Man");
cout << names.getName() << endl;
cout << names.getSurname() << endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
names.cc:19:27: error: no matching function for call to ‘Names::Names(const char [5], const char [4])’
Names names("Mike", "Man");
^
names.cc:19:27: note: …Run Code Online (Sandbox Code Playgroud) 我是 C++ 新手,遇到了一个问题。我正在使用 rapidJSON 创建 JSON 文档。
void setKeyValue() {
Value obj(kObjectType);
Value key("key");
Value val(42);;
obj.AddMember(key, val, d.GetAllocator());
}
Run Code Online (Sandbox Code Playgroud)
按预期工作。但是当我尝试替换对 key 的调用以使其使用传入的参数时,如下所示:
void setKeyValue(string myKey) {
Value obj(kObjectType);
Value key(myKey);
Value val(42);;
obj.AddMember(key, val, d.GetAllocator());
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 中的myKey 会Value key(myKey)出现一个红色卷曲的下标,内容如下:
造成这种情况的原因是什么以及如何解决?
为什么int*数组不能直接初始化,但char*数组可以?我知道它们不一样,但导致这种情况发生的确切差异是什么(请解释原因)?
我知道为什么不能int* p[]直接初始化.
我不知道怎么可能char* name[]?
例如:
char* name[] = { "Mostafa Chamran", "Mehdi Zeinoddin", "Ebrahim Hemmat" };
Run Code Online (Sandbox Code Playgroud)
和
int* p[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
给出错误:转换无效
我不知道要搜索什么来查找相关问题,所以我不知道是否存在相同的问题
我在乱搞,发现一些奇怪的东西.你实际上可以做"a" + 2,程序编译好,但不输出任何东西.然而"a" + 32说array subscript is above array bounds.