小编joh*_*ith的帖子

C++中的因变量?

我之前尝试过询问,但我不是很清楚,所以我重新询问它.

我想要一个取决于另一个变量值的变量,例如本例中的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)

c++ nested function

7
推荐指数
2
解决办法
2084
查看次数

C++中的参考函数

我有一个函数,当我尝试编译时,它给出了错误"无法从'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 ++,为什么它不会产生任何错误?

c++ reference function

5
推荐指数
2
解决办法
198
查看次数

HTTP:为什么需要指定主机名?

我开始学习套接字,并试图弄清楚为什么需要在请求中指定主机名。如果我已经连接到“www.google.com”,那么请求中的“主机:www.google.com\r\n”有什么意义?服务器不是已经知道自己的名字了吗?

http

5
推荐指数
1
解决办法
4772
查看次数

在单独的文件中定义的类

如果在文件B.cpp中定义了它的类,是否可以在文件A.cpp中创建一个对象?

我的意思是,您可以使用extern访问在另一个文件中初始化的变量.课程有类似的东西吗?

c++

4
推荐指数
1
解决办法
2401
查看次数

在C++中调整字符串的大小是危险的

假设你有一个像这样的字符串:

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"在同一位置取代了它.

没关系,我正在打印指针的位置而不是它指向的位置.作为一个附带问题,有没有人知道如何在不打印字符串的情况下打印字符指针的值?

c++ string

3
推荐指数
1
解决办法
644
查看次数

有没有更好的方法来搜索文件中的字符串?

我需要在(非文本)文件中搜索字节序列"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().它不是文本文件,因此可能没有多少换行符.
  • 在我尝试使用多字符缓冲区然后将缓冲区复制到C++字符串然后使用之前string::find().这不起作用,因为'\0'整个文件中有许多字符,因此当复制到字符串时,缓冲区中的序列会被剪切得很短.

c++ search

3
推荐指数
1
解决办法
2129
查看次数

没有自己的get方法有一个set方法是不好的做法吗?

假设我有一个类(名称圈是随机的,没有意义):

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的函数,这太奇怪了吗?

c++ class accessor

2
推荐指数
1
解决办法
161
查看次数

初始化向量的多个(唯一)条目

使用数组,您可以执行此操作:

int a[] = { 1,2,3,4,5,6 }
Run Code Online (Sandbox Code Playgroud)

你是如何用矢量做到的?

c++ vector

2
推荐指数
2
解决办法
1640
查看次数

这个字符串赋值有什么问题?

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()不是字符串文字?

c++ string

1
推荐指数
1
解决办法
162
查看次数

如何强制 git 恢复

我的 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)

git

1
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×8

function ×2

string ×2

accessor ×1

class ×1

git ×1

http ×1

nested ×1

reference ×1

search ×1

vector ×1