相关疑难解决方法(0)

使用-1将所有位设置为true是否安全?

我已经看到这种模式在C&C++中使用了很多.

unsigned int flags = -1;  // all bits are true
Run Code Online (Sandbox Code Playgroud)

这是一个很好的便携式方法吗?或正在使用0xffffffff或~0更好?

c c++ binary bit-fields

130
推荐指数
9
解决办法
3万
查看次数

签署C中的无符号转换 - 它总是安全吗?

假设我有以下C代码.

unsigned int u = 1234;
int i = -5678;

unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)

什么隐式转换在这里怎么回事,这是代码为安全的所有值u和i?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)

c type-conversion

127
推荐指数
3
解决办法
16万
查看次数

int到unsigned int转换

我很惊讶地知道我无法通过强制转换将signed转换为unsigned int!

int i = -62;
unsigned int j = (unsigned int)i;
Run Code Online (Sandbox Code Playgroud)

我以为自从我开始使用演员表后我就已经知道了,但是我不能这样做!

c++

37
推荐指数
4
解决办法
13万
查看次数

为什么缩小使用花括号分隔初始值设定项的转换会导致错误?

我在"C++编程语言"第4版中学习了大括号分隔初始化器.>第2章:C++之旅:基础知识.

我引用下面的书.

=表格是传统的并且可以追溯到C,但是如果有疑问,请使用通用{} -list表单(第6.3.5.2节).如果不出意外,它可以帮助您避免丢失信息的转换(缩小转化次数;§10.5):

int i1 = 7.2;    // i1 becomes 7
int i2 {7.2};    // error : floating-point to integer conversion
int i3 = {7.2};  // error : floating-point to integer conversion (the = is redundant)
Run Code Online (Sandbox Code Playgroud)

但是,我无法重现这些结果.

我有以下代码.

#include <iostream>

int main()
{
    int i1 = 7.2;
    int i2 {7.2};
    int i3 = {7.2};

    std::cout << i1 << "\n";
    std::cout << i2 << "\n";
    std::cout << i3 << "\n";
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时,我没有得到任何错误.我收到警告,std=c++11但没有错误.

$ g++ init.cpp 
init.cpp: In function …
Run Code Online (Sandbox Code Playgroud)

c++ narrowing c++11

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

标签 统计

c++ ×3

c ×2

binary ×1

bit-fields ×1

c++11 ×1

narrowing ×1

type-conversion ×1