我已经看到这种模式在C&C++中使用了很多.
unsigned int flags = -1; // all bits are true
Run Code Online (Sandbox Code Playgroud)
这是一个很好的便携式方法吗?或正在使用0xffffffff或~0更好?
假设我有以下C代码.
unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)
什么隐式转换在这里怎么回事,这是代码为安全的所有值u和i?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)
我很惊讶地知道我无法通过强制转换将signed转换为unsigned int!
int i = -62;
unsigned int j = (unsigned int)i;
Run Code Online (Sandbox Code Playgroud)
我以为自从我开始使用演员表后我就已经知道了,但是我不能这样做!
我在"C++编程语言"第4版中学习了大括号分隔初始化器.>第2章:C++之旅:基础知识.
我引用下面的书.
=表格是传统的并且可以追溯到C,但是如果有疑问,请使用通用{} -list表单(第6.3.5.2节).如果不出意外,它可以帮助您避免丢失信息的转换(缩小转化次数;§10.5):
Run Code Online (Sandbox Code Playgroud)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)
但是,我无法重现这些结果.
我有以下代码.
#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)