- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法编译以下代码。
void print_number(long n) {
std::cout << n << std::endl;
}
void print_number(float n) {
std::cout << n << std::endl;
}
void print_pair(std::pair<std::string, long> p) {
std::cout << std::get<1>(p) << std::endl;
}
void print_pair(std::pair<std::string, float> p) {
std::cout << std::get<1>(p) << std::endl;
}
int main() {
print_number(12l);
print_number(3.4f);
print_pair({"long", 12l});
print_pair({"float", 3.4f});
return 0;
}
print_number
功能运行良好。然而,编译器提示重载的 print_pair
功能: error: call of overloaded ‘print_pair(<brace-enclosed initializer list>)’ is ambiguous
.
<brace-enclosed initializer list>
就足够了或std::pair
不工作?如何重载接收 std::pair
的函数参数?
最佳答案
太;博士
为了解决歧义,您可以向编译器提供正确的类型:
print_pair(std::make_pair<std::string, long>("long", 12l));
print_pair(std::make_pair<std::string, float>("float", 3.4f));
或
print_pair(std::make_pair(std::string("long"), 12l));
print_pair(std::make_pair(std::string("float"), 3.4f));
<小时/>
歧义问题源于事实 "long"
和"float"
不是std::string
,而是const char[]
.
因此,当您尝试构造 std::pair
时使用以下表达式:std::pair{"long", 12l}
,你得到的是 std::pair<const char[5], long>
.
(与 float 相同;即 std::pair<const char[5], float>
)。
您的重载print_pair
接受 std::pair<std::string, long>
或std::pair<std::string, float>
。前面的类型都不匹配,因此编译器必须执行转换。因此,它无法自动扣除您想要执行的转换。两者都有效。
例如:
std::pair<const char[5], long>
|
----------------------------------------------------------------
v v
std::pair<std::string, long> std::pair<std::string, float>
“证明”问题是 std::string
( long
或 float
都不是),您还可以解决构造适当的 std::string
的歧义。 (而不是 char
数组):
print_pair(std::make_pair(std::string("long"), 12l));
print_pair(std::make_pair(std::string("float"), 3.4f));
从C++17开始,这个样板可以简化为:
using namespace std::string_literals;
print_pair(std::pair{"long"s, 12l});
print_pair(std::pair{"float"s, 3.4f});
关于c++ - 调用重载的 ‘<brace-enclosed initializer list>’ 与 suffices forpair 是不明确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076144/
我无法编译以下代码。 void print_number(long n) { std::cout p) { std::cout (p) p) { std::cout (p) )’
据我了解,:host-context 用于根据父级选择器应用样式。 让我们考虑如下规则: :host-context(.red-theme) { 背景颜色:红色; } 同样可以使用 :host 选择器
我有一个 SQLite3 数据库,其中包含以下五个表: Addressbook SQL Schema 列表可以分配给联系人和打印作业。如果我想处理打印作业(例如在信封上打印联系人),我需要获取与该打印
尝试安装 R-3.3.2 但当我使用 $./configure 时,我不断收到错误: 正在检查 bzip2 支持是否足够...配置:错误:需要 bzip2 库和 header 最佳答案 它对我有用:
我是一名优秀的程序员,十分优秀!