gpt4 book ai didi

c++ - Visual Studio 2019为C26444提供cout.imbue

转载 作者:行者123 更新时间:2023-12-02 10:21:29 26 4
gpt4 key购买 nike

当我使用Visual Studio 2019时,它为我带来了绿色的花样:

#include <iostream>
#include <locale>

int main() {
// Green squiggles given for this entire line:
std::cout.imbue(std::locale("en_US.utf8"));
// Visual Studio says, "C26444: Avoid unnamed objects with custom construction and destruction (es.84)"

// Using cout.imbue to provide nice formatting for numbers:
std::cout << "Example locale formatting: " << 100'000.00 << '\n';
}

我已经尝试过一些类似的变化:
std::locale my_locale("en_US.utf8");
// Now the green squiggles just appear from cout.imbue onward:
std::cout.imbue(my_locale);

我相信es.84来自C++核心准则:
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-noname

但是,我不确定如何解决此问题。我查看了cppreference.com和cplusplus.com作为示例,但是我正在做它们所显示的内容。

Visual Studio不喜欢什么?如何解决?

最佳答案

Visual Studio编译器(MSVC)不喜欢您尚未命名对imbue的调用的返回值的事实。我不能说这个警告是否“合理”。但是,通过将返回的值分配给命名变量,可以很容易地添加代码以防止警告:

std::locale loc = std::cout.imbue(std::locale("en_US.utf8"));

否则,编译器将假定在未命名(否则未使用)返回的 std::locale对象(很可能是)上调用 locale析构函数。

关于c++ - Visual Studio 2019为C26444提供cout.imbue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59924629/

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