【发布时间】:2019-08-19 01:33:23
【问题描述】:
我目前正在尝试理解函数调用的概念,并注意到您可以编写糟糕的代码,但仍然可以通过滥用隐式转换、const 和 static 使其工作。
现在我想了解为什么,尤其是它是如何工作的。例如下面是我用于测试的代码 sn-p。
标有 (1) 的行需要 a_const 要求它是 const 修饰符,并且有一个 static 函数需要或多或少适当的参数。删除这两个中的任何一个都会导致编译错误。那么这是如何工作的呢?
#include <iostream>
struct A {
static void func(const int a, int b) {
std::cout << "A-1"<<std::endl;
}
void func(const int a, float b) {
std::cout << "A0"<<std::endl;
}
void func(double a, float b) {
std::cout << "A1"<<std::endl;
}
void func(unsigned int a, char b) {
std::cout << "A2"<<std::endl;
}
void func(float a, int b) {
std::cout << "A3"<<std::endl;
}
};
int main() {
const A a_const;
A a;
a_const.func(1.f,1.f); // (1)
// a.func(1.f,1.f); // (2)
return 0;
}
【问题讨论】:
-
您应该深入了解 C++ 标准的
16.3.3 Best viable function [over.match.best]部分。这真是一个乱七八糟的话题。 -
@VTT,我知道这个话题很乱,虽然不知道要找什么。然而,我发现终于到了让自己沉浸其中并希望变得更有知识的时候了。
标签: c++ static constants implicit-conversion function-call