4

我是 code::blocks 的新手,对 c++ 也很陌生。我知道有很多关键字,我不应该将它们用于变量名称,并且它们通常以不同的颜色显示,就像它们在 visualstudio 中一样。现在,当我将一些代码片段从旧的 vs 项目复制到新的 code::blocks 项目时,我的一些变量名突然变了颜色。例如,在这段代码中,变量 begin 和 end 现在显示为绿色,我不明白为什么。

int begin = 0;
int end = 4;
int myarray[end];
for (int i = begin; i < end; i++)
{
    myarray[i] = i;
}

在某些情况下,此代码甚至无法编译,并且出现奇怪的“冲突声明”错误。无论如何我可以使用这些名称,还是它们以某种方式保留在 code::blocks 中?我查看了一些书籍,但据我所知,它们不是 c++ 关键字。是我现在使用 c++11 的原因吗?我正在使用 ide 的 v.12.11 和随附的 mingw 编译器。感谢您的帮助。

4

2 回答 2

7

我从您的困惑中得知,您还没有使用过 STL 容器……但是,如果您是 C++ 新手,那可能是个好主意。无论如何,在任何 C++ 标准beginend都没有关键字,在 C++11 中也没有。但它们都是函数的名称,返回一个迭代器对象,用于遍历 STL 容器,如下所示:

vector<int> x = { 1, 2, 3, 4 };
vector<int>::iterator it;

for (it = x.begin(); it != x.end(); ++it)
{
    cout << *it << endl;
}

在 C++ 日常实践中,这个概念非常常用,以至于这些名称被 CodeBlocks 列为“用户关键字”。用户关键字通常是绿色的,因此可以与语言关键字区分开来。如果这让您感到困扰,您可以随意操作列表,甚至完全删除它。只需从菜单栏中选择“设置”->“编辑器”,然后单击“语法突出显示”选项卡。在那里你可以做你喜欢的所有设置。获取手册以获取更多信息。

图片 http://imageshack.us/a/img189/3956/m1qe.png

不管有没有语法高亮,你都不应该得到编译错误。原因可能是,您的项目包含标准库头文件,#include <vector>而您的代码包含using namespace std;某处。您可能使用预编译的标头 - 在这种情况下也要检查它。

此外,我建议您查看标准库容器并尝试一下。与普通数组相比,它们有几个优点,但您最好自己找出答案。但是,不要让自己被这些迭代器吓倒——在 C++11 中,你也可以编写

vector<string> y = { "Foo", "Bar" };
for (auto& str : y) cout << str << endl;

相反,这也适用于您的数组

float z[] = { 0.5f, 1.5f, 2.5f, 3.5f };
for (auto& num : z) cout << num << endl;
于 2013-08-27T14:13:59.157 回答
2

变量开始和结束现在显示为绿色,我不明白为什么

您可能有一个using namespace std;地方,将标准库的部分或全部名称转储到不合适的范围内。该库包含(在许多其他名称中)称为beginand的函数end,您的语法高亮器可能会找到这些函数。

在某些情况下,此代码甚至无法编译

有时,你的名字会隐藏库名,代码会编译。有时,他们不会,所以你会得到一个错误。

我可以使用这些名称,还是以某种方式保留它们?

是的。摆脱不适当的using指令,您可以随意使用任何非保留名称。唯一保留的名称是关键字、具有特定下划线和大写字母模式的名称以及std命名空间中的名称。

是我现在使用 c++11 的原因吗?

是的。这些函数在 2011 年被添加到标准库中。

于 2013-08-27T14:04:57.927 回答