gpt4 book ai didi

c++ - 调用构造函数时必须有多明确?

转载 作者:可可西里 更新时间:2023-11-01 15:22:27 24 4
gpt4 key购买 nike

我有这门课

struct foo
{
explicit foo(const std::uint32_t& x, const std::uint32_t& y);
};

和一个方法

int main()
{
std::int32_t x = -1;
std::int32_t y = -1;
foo f(x, y);
}

在我的编译器 (MSVC2012) 上,它编译并运行时将值 xy 包装成无符号类型。我没想到会这样,但预计会因类型不匹配而出现编译错误。

我错过了什么?

最佳答案

你真倒霉,该标准确实允许通过为常量引用传递的参数创建匿名临时对象,将有符号隐式转换为无符号。

(请注意,对于非常量引用,这不是真的)。​​

如果您使用的是 C++11,最好的办法是删除使用的构造函数

foo(const std::int32_t& x, const std::int32_t& y) = delete;

在 C++11 之前,您可以将此构造函数设为 private 而不是 define 它。更像是老式的不可复制的成语。

MSVC2012 是一种 C++03/C++11 编译器。它实现了一些 C++11 功能,但没有实现其他功能。不幸的是,删除构造函数是它支持的功能之一,因此私有(private)化方法是您可用的最佳方法。

关于c++ - 调用构造函数时必须有多明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com