c++ - std::make_pair 自动类型推导?

标签 c++

考虑这个函数:

std::pair<int, double> getPair()
{
    return std::make_pair(0, 0);
}

为什么会编译?

不应该make_pair返回 std::pair<int, int>这与 std::pair<int, double> 不兼容?从 int 到 double 的转换发生在哪里?

示例代码链接:https://ideone.com/Zq6ooY

最佳答案

std::make_pair(0, 0);确实创建了一个 std::pair<int,int>目的。但是,您对配对的不兼容性是不正确的。如果它们的论点是相容的,那么它们是相容的。

参见 cppreference :

// #4
template< class U1, class U2 >
constexpr std::pair<T1,T2>( const pair<U1, U2>& p );
// #5
template< class U1, class U2 >
constexpr std::pair<T1,T2>( pair<U1, U2>&& p );

如果类型为 TX,这些将被启用可以从类型 UX 构造,在您的情况下,使用 #5 是因为 int可以从 double&& 构建.

关于c++ - std::make_pair 自动类型推导?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64116637/

相关文章:

c++ - 如果 include_directories 中的路径之一不存在,为什么 CMakeLists 不抛出警告/错误(在编译期间)?

c++ - 使用和何时使用 int16_t、int32_t、int64_t 和分别为 short int、int、long int、long

c++ - 通过指针删除非拥有的动态数组

c++ - 使用 Sqlite3 和 C++ 以编程方式执行 VACUUM 命令?

c++ - vector 迭代器不可取消引用,同时尝试从文件中读取

引用存储的基类指针时出现 C++ 段错误

c++ - 如何用不同数量的默认参数包装一个函数,使其只有一个参数?

c++ - 如何通过套接字发送 wstring 变量?

c++ - 你如何使用类型特征来进行条件编译?

c++ - 在cpp文件中用#pragma指定延迟加载dll