相关疑难解决方法(0)

在C中初始化char数组

我不确定在初始化后以下列方式在char数组中会出现什么:

char buf[5]={0,};
Run Code Online (Sandbox Code Playgroud)

这相当于

char buf[5]={0,0,0,0,0};
Run Code Online (Sandbox Code Playgroud)

c arrays initialization

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

使用联合在具有共同初始序列的两个结构之间进行转换是否合法且定义良好的行为(参见示例)?

我有一个公开面向结构A和内部结构B的API,需要能够将结构B转换为结构A.以下代码在C99(和VS 2010/C89)和C中是合法且定义良好的行为 ++ 03/C++ 11?如果是,请解释是什么使它明确定义.如果不是,那么在两种结构之间进行转换的最有效和跨平台的方法是什么?

struct A {
  uint32_t x;
  uint32_t y;
  uint32_t z;
};

struct B {
  uint32_t x;
  uint32_t y;
  uint32_t z;
  uint64_t c;
};

union U {
  struct A a;
  struct B b;
};

int main(int argc, char* argv[]) {
  U u;
  u.b.x = 1;
  u.b.y = 2;
  u.b.z = 3;
  u.b.c = 64;

  /* Is it legal and well defined behavior when accessing the non-write member of a union in this case? */
  DoSomething(u.a.x, u.a.y, …
Run Code Online (Sandbox Code Playgroud)

c c++ c99 c89 unions

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

我在哪里可以看到C++标准

可能重复:
我在哪里可以找到当前的C或C++标准文档?

我想将STL与我正在研究的当前程序一起使用,并且供应商不支持我认为合理的STL,工作不是我的合理想法.我一直无法找到一个C++标准或STL标准,它不仅仅是一个让我想知道我的解释是否正确或供应商解释是否正确的API.我已经在SGI的网站上花了很多时间.任何推荐?此外,是否有任何文档不是API被认为是标准?

c++ stl

15
推荐指数
3
解决办法
736
查看次数

C:strchr()和index()之间的差异

我在C中做了一些需要使用字符串的东西(就像大多数程序一样).

查看联机帮助页,我发现,在字符串(3)处:

概要

#include <strings.h>

char * index(const char *s, int c)

(...)

#include <string.h>

char * strchr(const char *s, int c)
Run Code Online (Sandbox Code Playgroud)

所以我好奇地看着strchr(3)和index(3)......

我发现两者都做到了以下几点:

strchr()/ index()函数定位s指向的字符串中第一次出现的c.终止空字符被认为是字符串的一部分; 因此,如果c为'\ 0',则函数定位终止'\ 0'.

因此,该联机帮助页基本上是一个复制和粘贴.

此外,我认为,由于一些混淆的必要性,第二个参数有类型int,但实际上是一个char.我想我没有错,但任何人都可以向我解释为什么它是一个int,而不是一个char

如果它们都是相同的,哪一个在版本之间更兼容,如果不兼容,哪个区别?

c string standard-library

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

C++ 11标准和免费提供的N3337草案之间的章节编号是否有所不同?

C++ 11标准ISO/IEC 14882:2011后来的免费下载草案 N3337之间条款,章节,小节,段落等的编号是否不同

需要明确的是:我的问题不在于是否建议使用N3337代替官方标准,因为Stackoverflow已经很好地回答了这个问题; 但只是编号不同.

作为参考,这里是我发现的最接近相关的非Stackoverflow答案(如果你按照链接,具体参考日期为"Sun Mar 18,12:06:41 PM"的项目).另外作为参考,@ Nemo将注意力集中在相关的Stackoverflow问题上.

c++ standards c++11

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

标准委员会如何表明正在考虑的论文的状态?

C++标准委员会是否(在开放标准网站或其他地方)提供了所考虑的论文状态的任何指示,并在开放标准网站上编制索引?我指的是个别"论文",表明标准的潜在变化,以及相关的讨论,如下例所示; 我不是指(发布或草案)标准作为一个整体.

例如,我如何确定N3922是被接受还是被拒绝?

c++ standards

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

绕过一个类的构造函数是合法的还是会导致未定义的行为?

请考虑以下示例代码:

class C
{
public:
    int* x;
};

void f()
{
    C* c = static_cast<C*>(malloc(sizeof(C)));
    c->x = nullptr; // <-- here
}
Run Code Online (Sandbox Code Playgroud)

如果由于任何原因我不得不忍受未初始化的内存(当然,如果可能的话,我会打电话new C()),我仍然可以调用放置构造函数.但是,如果我省略这一点,如上所述,并手动初始化每个成员变量,是否会导致未定义的行为?即绕过构造函数本身未定义的行为,或者用类外的一些等效代码替换调用它是否合法?

(通过另一个完全不同的问题遇到这个问题;要求好奇......)

c++ malloc object-lifetime language-lawyer

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

内存是否泄漏了C++中的"未定义行为"类问题?

事实证明,许多无辜的东西都是C++中未定义的行为.例如,一旦一个非空的指针已被delete"D 甚至在打印的是指针的值是未定义的行为.

现在内存泄漏肯定是坏事.但他们是什么类的情况 - 定义,未定义或其他类别的行为?

c++ memory-leaks memory-management undefined-behavior

14
推荐指数
5
解决办法
1898
查看次数

为什么lambda表达式在未评估的操作数中不允许,但在常量表达式的未评估部分中允许?

如果我们看看草案C++标准部分5.1.2 Lambda表达式2段说(强调我的未来):

lambda表达式的评估导致prvalue临时(12.2).这个临时对象称为闭包对象.lambda表达式不应出现在未评估的操作数中(第5条).[注意:闭包对象的行为类似于函数对象(20.8).-结束注释]

和部分5.19 常量表达式2段说:

条件表达式是核心常量表达式,除非它涉及以下之一作为潜在评估的子表达式(3.2),但是未评估的逻辑AND(5.14),逻辑OR(5.15)和条件(5.16)操作的子表达式不被视为 [...]

并有以下子弹:

- lambda表达式(5.1.2);

那么为什么lambda表达式不允许在未评估的操作数中,但是在常量表达式的未评估部分中是允许的?

我可以看到,对于未评估的操作数,在几种情况下(decltypetypeid)的类型信息不是很有用,因为每个lambda都有一个唯一的类型.虽然为什么我们想要让它们在未经评估的不断表达的背景下不明确,或许是为了让SFINAE

c++ lambda constant-expression c++11 c++14

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

在C++ 11之前的"常量表达式"

constexpr关键字是在C++ 11中引入的,因为(我认为)是"常量表达式"的相应概念.但是,这个概念隐含在C++ 98/c ++ 03中,因为数组声明需要一个常量表达式:

// valid:
int a[sizeof(int)];
int b[3+7];
int c[13/4];
const int n = 3;
int d[n];
// invalid:
int m = 4;
int e[m];
Run Code Online (Sandbox Code Playgroud)

还有其他"常量表达式",即可以在编译时评估(和/或必须)的表达式; 一个例子是模板参数.

对于预C++ 11,在C++ 98/03标准或其他地方是否存在以下情况?

  • 需要常量表达式的语法结构的完整列表(例如数组声明和模板实例化)
  • 管理这种常量表达式的规则(可能这只是从上面列表中的项到它们在标准中的定义的映射)

c++ compile-time-constant constant-expression c++03 c++98

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