小编NoC*_*nde的帖子

Why is b[2] false?

string s;
bool b[] = {s=="",  s==s.c_str(),  s.c_str()==""};
Run Code Online (Sandbox Code Playgroud)

sets

b[] = {true, true, false};
Run Code Online (Sandbox Code Playgroud)

why is b[2] false?

If A==B and A==C, should that not imply B==C?

c++ string stdstring string-literals equality-operator

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

仅初始化结构或数组的前 n 个成员

我正在使用 RAD studio 10.2 附带的 clang 编译器(我认为是 c++ 11)。我今天错误地发现结构或数组的前 n 个成员可以使用通常的大括号进行分配,例如

int a[500]={1};
struct {int a,b,c;} st={2,3};
Run Code Online (Sandbox Code Playgroud)

上面的编译和工作正常,但我从来没有遇到过这个或见过它以前使用过,我在网上找不到它的提及(也许我正在使用错误类型的措辞进行搜索)。这个 C++ 有文档吗?

c++ initialization clang aggregate-initialization

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

GlobalMemoryStatusEx不考虑新数组

我在具有16 GB RAM的Windows 10上使用c ++ builder 10.2 Tokyo.如果我跑

uint64_t FreeMBs()
{
    MEMORYSTATUSEX status;
    status.dwLength = sizeof(status);
    GlobalMemoryStatusEx(&status);
    return status.ullAvailPhys / (1024 * 1024);
}

Mem0=FreeMBs();
std::vector<int64_t> v;
v.resize(1000000000); // 1 billion
Mem1=FreeMBs();
Run Code Online (Sandbox Code Playgroud)

Mem0-Mem1大约为8 GB.

如果,而不是上述,我跑

Mem0=FreeMBs();
int64_t v=new int64_t[1000000000};
Mem1=FreeMBs();
Run Code Online (Sandbox Code Playgroud)

然后Mem0-Mem1大约为零.如果我使用malloc为数组保留空间,Mem1仍然或多或少地与Mem0保持不变.我尝试设置v [1000000000-1] = 0来查看是否触发了某些内容但它没有触发.

为什么不考虑阵列?

c++ windows winapi

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

当 a 是代码块时使用逗号运算符 (a, b)

#include <stdio.h>

int main()
{
    int sum = 0, result = (({for (int i = 0; i < 5; i++) sum += i;}), sum);
    
    printf("result = %d\n", result);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显示

result = 10
Run Code Online (Sandbox Code Playgroud)

我正在使用 gcc 中 C 的默认版本。它特定于 gcc 吗?我知道(a, b)回报b,但我没想到它会在阻塞时发挥a作用{}。谁能解释它为什么起作用以及为什么必须将块括起来才能使其起作用?

#define编辑:这是我正在尝试的一个人为的简化示例。一些程序员的评论(谢谢)澄清了这一点。案件结案。

c gcc gcc-statement-expression

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

为什么std :: vector erase需要begin()?

我们为什么要写v.erase(v.begin(), v.begin()+3)

为什么不定义为erase(int, int)这样你可以写v.erase(0,2),实现负责begin()s?

c++ iterator vector

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

在“ for(auto c:str)”中,c到底是什么?

如果我声明:

string s = "ARZ";
Run Code Online (Sandbox Code Playgroud)

然后运行以下代码:

for (auto& c : s) {
  cout << (void*)&c << endl;
}
Run Code Online (Sandbox Code Playgroud)

结果将对应于的地址s[0]s[1]s[2]分别。

如果我删除&并运行:

for (auto c : s) {
  cout << (void*)&c << endl;
}
Run Code Online (Sandbox Code Playgroud)

的地址c始终相同。

大概c只是指向向量的指针,它的值sizeof(char)随每个循环而增加,但是我发现很难理解为什么我不需要写*c访问字符串char值的原因。

最后,如果我运行:

for (auto c: s) {
  c='?';
  cout << c << endl;
}
Run Code Online (Sandbox Code Playgroud)

它打印出3个问号。

我发现很难理解c实际上是什么?

c++ loops range auto

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