我之前尝试过询问,但我不是很清楚,所以我重新询问它.
我想要一个取决于另一个变量值的变量,例如本例中的b:
int main(){
int a;
dependent int b=a+1; //I'm just making this up
a=3;
cout << b; //prints 4
a=4;
cout << b; //prints 5
}
Run Code Online (Sandbox Code Playgroud)
当然,这在C++中不存在,但这正是我想要的.
所以我试着做一个函数:
int main(){
int a;
int b(){ return a+1; } //error
a=3;
cout << b(); //would print 4 if C++ allowed nested functions
a=4;
cout << b(); //would print 5 if C++ allowed nested functions
}
Run Code Online (Sandbox Code Playgroud)
上述方法不起作用,因为C++不允许嵌套函数.
我只能在main()之外创建函数,如下所示:
int b(){
return a+1; //doesn't work because a is not in scope
}
int …Run Code Online (Sandbox Code Playgroud) 我有一个函数,当我尝试编译时,它给出了错误"无法从'int'转换为'int&'".
int& preinc(int& x) {
return x++;
}
Run Code Online (Sandbox Code Playgroud)
如果我用x替换x ++,它将编译,但我不确定它是如何使它有任何不同.我认为x ++在x递增x之前返回x,所以不应该"返回x ++"与preinc返回的"return x"相同吗?如果问题在于++运算符作用于x,那么如果我在return语句之前或之后放置行"x ++",或者用++ x替换x ++,为什么它不会产生任何错误?
我开始学习套接字,并试图弄清楚为什么需要在请求中指定主机名。如果我已经连接到“www.google.com”,那么请求中的“主机:www.google.com\r\n”有什么意义?服务器不是已经知道自己的名字了吗?
如果在文件B.cpp中定义了它的类,是否可以在文件A.cpp中创建一个对象?
我的意思是,您可以使用extern访问在另一个文件中初始化的变量.课程有类似的东西吗?
假设你有一个像这样的字符串:
char* a="01234"
Run Code Online (Sandbox Code Playgroud)
让&a = 0000,&(a + 1)= 0001,&(a + 2)= 0002,等等,如果在0007处已经为另一个变量分配了一些内存会发生什么,并且您尝试将a调整为更大尺寸(a ="0123456789")?是否会移动到可以容纳更大字符串的新位置,或者0007中的数据是否会被覆盖?
编辑:
当他们说不允许调整C风格的字符串时,我不明白人们的意思.
char* a="01234"
cout << &a; //Prints 00FF1360
cout << a; //Prints 01234
a="0123456789"
cout << &a; //Still prints 00FF1360
cout << a; //Prints "0123456789"
Run Code Online (Sandbox Code Playgroud)
当我重新分配它时,指针a根本没有改变.似乎原始字符串"01234"刚刚被销毁,"0123456789"在同一位置取代了它.
没关系,我正在打印指针的位置而不是它指向的位置.作为一个附带问题,有没有人知道如何在不打印字符串的情况下打印字符指针的值?
我需要在(非文本)文件中搜索字节序列"9μ}Æ"(或"\ x39\xb5\x7d\xc6").
在线搜索5个小时后,这是我能做的最好的事情.它有效,但我想知道是否有更好的方法:
char buffer;
int pos=in.tellg();
// search file for string
while(!in.eof()){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='9'){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='µ'){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='}'){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='Æ'){
cout << "found";
}
}
}
}
in.seekg((streampos) pos);
Run Code Online (Sandbox Code Playgroud)
注意:
getline().它不是文本文件,因此可能没有多少换行符.string::find().这不起作用,因为'\0'整个文件中有许多字符,因此当复制到字符串时,缓冲区中的序列会被剪切得很短.假设我有一个类(名称圈是随机的,没有意义):
Class circle{
double colorFrequency_;
public:
void setColor(double colorFrequency){ colorFrequency_=colorFrequency; }
void setColor(string colorName){ colorFrequency_=colorNameToFrequency(string colorName); }
double getColorFrequency()
string getColorName(){ /* converts color frequency into a string containing the name of a color it's close to, like "red" */ }
}
Run Code Online (Sandbox Code Playgroud)
一方面,有一个名为setColor的方法似乎不一致,但不是一个名为getColor的方法,但另一方面,如果我要使用名为setColorFrequency和setColorName的函数,那么这些名称将不是完全描述性的,因为setColorName不仅影响getColorName的输出,也影响setColorFrequency的输出.
有一个名为setColor的函数,但没有一个名为getColor的函数,这太奇怪了吗?
string s="abcdefghijklmnopqrstuvwxyz"
char f[]=" " (s.substr(s.length()-10,9)).c_str() " ";
Run Code Online (Sandbox Code Playgroud)
我想得到s的最后9个字符,并在子字符串的开头和结尾添加"",并将其存储为char [].我不明白为什么这不起作用,即使char f [] ="""a""".
是(s.substr(s.length() - 10,9)).c_str()不是字符串文字?
我的 git 日志如下所示:
commit b265eb43abd7704ed2560cca7c635dbd47b677b0
Date: Sun Feb 25 10:20:58 2018 -0500
added C3
commit 536d071bf99059ff8b519ae96ce6e97d92fbc7d7
Date: Sat Feb 24 20:50:15 2018 -0500
added B2
commit 6e46e4ff4135b4df55866a5df9af963e3d6ff218
Date: Sat Feb 24 11:07:58 2018 -0500
added a
commit 93ad202a08660a62f76496d728a3a89d727350a9
Date: Sat Feb 24 11:05:56 2018 -0500
first commit
Run Code Online (Sandbox Code Playgroud)
我想撤销我之前的提交并返回提交 6e46e4ff4135b4df55866a5df9af963e3d6ff218。但是,我想保留历史记录并且不想从 git 日志中删除“添加的 C3”和“添加的 B2”,因此排除了 git reset --hard 6e46e4ff4135b4df55866a5df9af963e3d6ff218。
我在网上做了一些阅读,人们说最完美的工具是“git revert”。我尝试“git revert 6e46e4ff4135b4df55866a5df9af963e3d6ff218”并查看以下内容
error: could not revert 6e46e4f... added a
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git …Run Code Online (Sandbox Code Playgroud)