【发布时间】:2018-12-23 17:14:46
【问题描述】:
通过函数时,我遇到了常量单个元素 std::vector 的问题。当 std::vector 变量包含单个元素时,C++ 编译器会自动调用错误的函数。这虽然是 C++ 设计的策略。但是,在这种情况下是否有任何明确的方法可以指定。以下是问题的示例
assume i have two overload functions both have the same name "foo"
void foo(const std::vector<int> A)
{
// do vector operator
printf("vector thing");
}
void foo(int a)
{
// do integer operator
printf("integer thing")
}
一般情况下这两个函数都被正确调用
foo({1,2,3}); // print do vector thing
foo( 3 ); // print do integer thing
但是来自 c++ 规则。打电话时
foo({5}); // print do integer thing ( I want it to call as vector )
其中一种方法是创建一个变量
std::vector<int> B = { 5 };
为了解决这个问题。
我觉得这个方法有点笨拙。是否有任何方法可以使编译器将 {5} 视为 5 并调用 foo(int a).
注意: 这是解释问题所在的参考 c++11 single element vector initialization in a function call
【问题讨论】:
-
考虑到这是一个很大的混淆源,只要明确写
std::vector,你就没有问题。 -
foo(std::vector<int>({5}));