【问题标题】:why am I getting long long maximum value as a return value?为什么我得到 long long 最大值作为返回值?
【发布时间】:2021-11-29 18:09:45
【问题描述】:

我试图在两个字符串相等时输出 -1,但是我得到 unsigned long long 最大值作为返回值,我尝试将 -1 转换为 long long 和 unsigned long long 但它不起作用,它当我使用 if-else 条件时有效,当我将表达式的返回值存储在变量中时它也有效,但是为什么当我直接输出返回值时它不起作用?

#include<iostream>
int main(){
    std::string a,b;
    std::cin>>a>>b;
    std::cout<<(a!=b?std::max(a.length(),b.length()):-1);
}

【问题讨论】:

  • Muhamed:答案是否有助于解决问题?如果有任何不清楚的地方,请询问,我会尽力改进答案。

标签: c++ conditional-operator outputstream


【解决方案1】:

std::max(a.length(),b.length()) 具有 unsigned 类型(不能保存负值)。 std::size_t。 -1 将转换为相同的类型,std::size_t(-1) 成为std::size_t 可以容纳的最大值。

要解决此问题,您可以将 std::max(a.length(), b.length()) 转换为 signed 类型,例如 std::intmax_t:

例子:

#include <cstdint>

std::cout<<(a != b ? static_cast<std::intmax_t>(std::max(a.length(), b.length())) : -1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2017-04-12
    相关资源
    最近更新 更多