为什么以下代码无法编译(gcc-5.4.0)?
jest.mock('./api');
import {getUsers} from "./api";
test("user list is an array", async () => {
expect.assertions(1);
const resp = await getUsers();
expect(Array.isArray(resp)).toBe(true);
});
我的意思是我看到了编译错误:
错误:没有匹配函数来调用'min(volatile int&,int&)'
不是volatile只是提示编译器,变量可能会从程序外部改变吗?
volatile int i{100};
int j{200};
std::cout << std::min(i, j);
当然有效。但是不应该原创作品吗?
答案 0 :(得分:23)
volatile
是限定符,就像const
一样。它不仅仅是对编译器的暗示。
std::min
期望这两个参数具有完全相同的类型和限定符。因此,在您的情况下,它会发出诊断信息。
由于你被允许介绍限定符,你可以沉迷于一点点手持并写下
std::min<volatile int>(i, j)
答案 1 :(得分:12)
正如@Bathsheba指出的那样,对两个参数的类型推导必须给出相同的类型。
但为了完整性,std::min
也被重载以接受std::initializer_list
。它的元素受复制初始化的影响,因此顶级cv限定符并不重要。所以这将有效:
std::cout << std::min({i, j});
请记住,它会执行复制,并且不接受或返回引用。