我有一堆重载函数来处理特定的 int 大小、float、double、char 和 std::string。
例如:
#include <cstdint>
#include <iostream>
void some_func(uint8_t& src) {
std::cout << "inside uint8_t" << std::endl;
}
void some_func(uint16_t& src) {
std::cout << "inside uint16_t" << std::endl;
}
void some_func(uint32_t& src) {
std::cout << "inside uint32_t" << std::endl;
}
void some_func(uint64_t& src) {
std::cout << "inside uint64_t" << std::endl;
}
void some_func(bool& src) {
std::cout << "inside bool" << std::endl;
}
void some_func(double& src) {
std::cout << "inside double" << std::endl;
}
void some_func(float& src) {
std::cout << "inside float" << std::endl;
}
void some_func(const char& src) {
std::cout << "inside char" << std::endl;
}
int main() {
some_func((bool)true);
some_func((double)13.4);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,重载const char& src函数被调用而不是doubleand bool。他们都写了显式的函数重载,那么编译器为什么要推广呢?而且double是 64 位,那么如何将其转换为char?我可以用模板专业化来解决这个问题吗?(我需要根据数据类型执行特定操作)
注意:我在 Visual Studio 2019 上用 std=c++17 编译
非常量左值引用不能用右值初始化。(bool)true;并且(double)3.14是右值。
唯一带有 const 左值引用参数(可以用右值初始化)的重载是const char& src唯一的,这就是使用它的原因。
由于类型不同(charvs bool/ double),char从参数创建一个临时对象,然后绑定到引用。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |