gpt4 book ai didi

c++ - 如何避免在非构造函数上进行隐式转换?

转载 作者:行者123 更新时间:2023-12-01 14:58:17 25 4
gpt4 key购买 nike

如何避免对非构造函数进行隐式转换?
我有一个函数,需要一个整数作为参数,
但是该函数还将包含字符, bool(boolean) 值和long。
我相信它是通过隐式转换它们来实现的。
我如何避免这种情况,以使该函数仅接受匹配类型的参数,否则将拒绝编译?
有一个关键字“explicit”,但不适用于非构造函数。 :\
我该怎么办?

下列程序可以编译,尽管我不想这样做:

#include <cstdlib>

//the function signature requires an int
void function(int i);

int main(){

int i{5};
function(i); //<- this is acceptable

char c{'a'};
function(c); //<- I would NOT like this to compile

return EXIT_SUCCESS;
}

void function(int i){return;}

*请务必指出任何误用术语和假设的情况

最佳答案

您不能直接这样做,因为char会自动提升为int

不过,您可以采用一种技巧:创建一个将char作为参数并且不实现它的函数。它将编译,但是会出现链接器错误:

void function(int i) 
{
}
void function(char i);
//or, in C++11
void function(char i) = delete;

使用 char参数调用该函数将破坏构建。

参见 http://ideone.com/2SRdM

术语:非构造函数?您的意思是不是构造函数的函数吗?

关于c++ - 如何避免在非构造函数上进行隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59463325/

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