gpt4 book ai didi

c++ - 将 double 分配给 std::string - 没有编译错误?

转载 作者:IT老高 更新时间:2023-10-28 22:36:46 28 4
gpt4 key购买 nike

为什么编译器不提示这段代码:

#include <string>
#include <iostream>

int main()
{
std::string a;
a = 2.3;
std::cout << "A:" << a << std::endl;
return 0;
}

GCC、MSVC 似乎根本不关心这个,即使它显然是错误的,并且实际上也不起作用!

输出是:

A:

哎哟!导致我的程序出现未检测到的错误。

最佳答案

std::stringoperator= 的重载这需要一个字符。当您通过值(即运算符)将参数传递给函数时,copy initialization发生。在复制初始化中,standard conversions ,也称为“隐式转换”,可用于转换值。在这种情况下,您的 double 会被静默转换为 char,以便可以在 operator= 中使用。

对于 GCC,-Wall -Wextra -pedantic 不会出现诊断。你可以试试-Wfloat-conversion,由-Wconversion开启。示例:

main.cpp:11:10: warning: conversion to 'char' alters 'double' constant value 
[-Wfloat-conversion]
a = 3.2;

或者,使用大括号强制缩小转换错误。

s = {4.3};
// warning: narrowing conversion of '4.2e+1' from 'double' to 'char' inside { }
// [-Wnarrowing]

关于c++ - 将 double 分配给 std::string - 没有编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26211958/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com