相关疑难解决方法(0)

访问非活动的union成员和未定义的行为?

我的印象是访问union除最后一个成员之外的成员是UB,但我似乎无法找到一个可靠的参考(除了声称它是UB但没有标准支持的答案).

那么,这是不确定的行为?

c++ undefined-behavior unions language-lawyer

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

在C++ 14中,C++标准是否在使用不确定值和未定义行为方面发生了变化?

正如初始化所述,需要进行左值到右值的转换?是int x = x;UB吗?C++标准在3.3.2 声明部分中有一个令人惊讶的例子,其中a int用它自己的不确定值初始化:

int x = 12;
{ int x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]

Johannes对此问题的回答表明是未定义的行为,因为它需要左值到右值的转换.

在最新的C++ 14草案标准中N3936,可以在此处找到此示例已更改为:

unsigned char x = 12;
{ unsigned char x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]

C++ 14中有关于不确定值和未定义行为的变化,这些变化在示例中引发了这种变化吗?

c++ undefined-behavior language-lawyer c++11 c++14

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

a&b的结果是什么?

这很尴尬,但按位AND运算符在C++标准中定义如下(强调我的).

执行通常的算术转换; 结果是其操作数的按位AND功能.运算符仅适用于整数或无范围的枚举操作数.

这看起来对我来说毫无意义.据我所知,"按位AND函数"在标准中的任何地方都没有定义.

我知道AND功能已被充分理解,因此可能不需要解释."按位"一词的含义也应该相当清楚:该函数应用于其操作数的相应位.但是,操作数的位构成不清楚.

是什么赋予了?

c++ bitwise-operators language-lawyer

39
推荐指数
3
解决办法
6618
查看次数

什么是C++中的不确定行为?它与未定义的行为有什么不同?

C++中不确定行为和未定义行为之间有什么区别?此分类是否也适用于C代码?

c c++

21
推荐指数
3
解决办法
2904
查看次数

作为抽象,C++是否支持表示两个以上值之一的"位"?

[C++11: 1.7]以位为单位讨论字节:

C++内存模型中的基本存储单元是字节.一个字节至少足以包含基本执行字符集(2.3)的任何成员和Unicode UTF-8编码形式的八位代码单元,并由连续的位序列组成,其数量为实现定义.最低有效位称为低位; 最重要的位称为高位.C++程序可用的内存由一个或多个连续字节序列组成.每个字节都有一个唯一的地址.

但是,我找不到标准中定义"位"的任何地方.

那么说C++不会对可能由单个位表示的值的数量进行限制吗?

是否允许三态位?

c++ language-lawyer

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

C与C++标准库的关系

这个问题与编程或特定的语言概念没有直接关系.我的问题是我们是否可以使用对C国际标准(例如C11)的引用来提供规范性参考来描述来自C图书馆的任何概念C++.

更具体地说,在标题中<climits>定义N3797::18.3.3 [c.limits]C library标题中进行描述.但是C标准提供了关于<limits.h>内容而不是N3797工作草案的更全面的信息.

所以关于C library定义的内容对于定义C11C++实现是否属实C++11,C library或者我们不能依赖于C标准提供的内容?

c c++ language-lawyer

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