Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用函数时是否有方法防止隐式静态_强制转换?_C++ - Fatal编程技术网

C++ 调用函数时是否有方法防止隐式静态_强制转换?

C++ 调用函数时是否有方法防止隐式静态_强制转换?,c++,C++,C++11添加了这一点 int x; unsigned int y{ x }; // ERROR 是否有可能启用类似的功能 int x; void f(unsigned int y); f(x); //ERROR 编译器:VC++2013试试这个(): 模板< 类型名T, typename=typename std::enable_if::type > 空位f(tx){} 否,没有编译器开关或其他常规设置来执行此操作。隐式转换是语言的一部分,在内置类型的一般情况下不能禁用。最接近的方法是用户

C++11添加了这一点

int x;
unsigned int y{ x }; // ERROR
是否有可能启用类似的功能

int x;
void f(unsigned int y);
f(x); //ERROR
编译器:VC++2013

试试这个():

模板<
类型名T,
typename=typename std::enable_if::type
>
空位f(tx){}

否,没有编译器开关或其他常规设置来执行此操作。隐式转换是语言的一部分,在内置类型的一般情况下不能禁用。最接近的方法是用户定义的包装类,它只有
显式的
构造函数,或者对试图调用的函数应用一些模板元黑客(如中所示)

您问题的前提似乎将隐式转换与缩小转换的特例混为一谈。以下是:

int x = 0;
unsigned int y{ x };
这不是一个错误。您,并且此警告可能会变成错误(使用GCC的
-Werror
),但这在C++11中不是新的,并且它本身并不禁止转换


同样,这是特定于所涉及的值的,不是隐式转换的一般规则。

您遇到了错误,或者希望编译器给出错误?@pranitkothari,我希望编译器给出错误或警告。不要尝试更改编译器的行为(因为这可能不容易实现)。您需要自己处理代码。是否愿意执行
f({x})
?您的问题文本当前不反映您的标题问题。。。显然你只想禁止缩小转换范围。我没有投反对票,但我认为OP的作者想要更多的编译器开关来禁止隐式强制转换。我收回了我的反对票,因为你的回答是正确的。这是否是一个答案还不能确定。
int x = 0;
unsigned int y{ x };