小编Kar*_*yan的帖子

不同类的构造函数的重载解析

考虑下面的代码。

struct A {
    int i;
};

struct B {
    char c;
};

struct C {
    double d;
};

void f(A a);
void f(B b);
void f(C c);

void g()
{
    f({5});
}
Run Code Online (Sandbox Code Playgroud)

在这里,我感到模棱两可f({5});。但似乎struct A的构造函数与完全匹配{5},而第二个则需要整数提升,而最后一个需要浮点转换。

那么为什么会有歧义呢?

c++ constructor initializer-list overload-resolution c++11

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

char c = 255 的值转换为 int

我的问题是关于 Stroustrup 的书 C++ 编程语言,第 4 版中的一段。他举了一个例子

char c = 255; // 255 is ‘‘all ones,’ ’ hexadecimal 0xFF
int i = c;
Run Code Online (Sandbox Code Playgroud)

并解释如何在 char 有符号或无符号的机器上转换。

i 的值是多少?不幸的是,答案是不确定的。在具有 8 位字节的实现中,答案取决于扩展为 int 时“全为”字符位模式的含义。在字符无符号的机器上,答案是 255。在字符有符号的机器上,答案是?1。

我的问题是为什么它会是 -1,这不取决于机器上使用的二进制数的表示形式吗?如果它使用一个的补码,它不是 0(-0) ,如果它是 2 的补码,它不会是 -1 吗?

c++ binary signed char

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