gpt4 book ai didi

c++ - 对字符串 C++ 的模糊整数赋值

转载 作者:太空狗 更新时间:2023-10-29 20:52:48 29 4
gpt4 key购买 nike

因此,在使用 C++ 时,我这样做了:

#include <iostream>

int main() {

std::string s{"someThing"};

std::cout << " s is: " << s << '\n';

s = 97;

std::cout << " s is: " << s << '\n';

return 0;
}

当我用 g++ 编译它时,它编译得很好,并且在运行时它的输出是:

  s is: someThing
s is: a

但我的疑问是为什么编译正确?

然后我发现了解决这个问题的 SO 问题:

Why does C++ allow an integer to be assigned to a string?

然后我从 C++ 中找到了这个 documentation :

basic_string& operator=( CharT ch );

所以,我的主要问题是:

  • 不应该basic_string& operator=( CharT ch );explicit ?也就是说,为什么是s = 97允许? s是一个字符串,那为什么要隐式转换赋给一个整数呢?

  • 可以吗s = 97避免/停止隐式转换?

还有一些附带问题:这段代码可以用 g++ 完美编译,但不能用 clang 编译,它报告了这个错误:

error: expected ';' at end of declaration
std::string s{"someThing"};
^

那么,为什么 g++ 可以编译它而 clang 不能?

编辑:感谢 Edgar Rokyan,现在它使用 clang++ 和 -std=c++11 编译选项。

编辑:因此,根据 Edgar RokyanMSalters 的回答,assignment operator can't be made explicit ,好吧,但为什么允许将整数分配给字符串

最佳答案

Shouldn't basic_string& operator=( CharT ch ); be explicit ? That is, why is this : s = 97 allowed? s is a string, then why should an integer be assigned to it by implicit conversion?

来自 explicit specifier :

The explicit specifier specifies that a constructor or conversion function (since C++11) doesn't allow implicit conversions or copy-initialization. It may only appear within the decl-specifier-seq of the declaration of such a function within its class definition.

因此,您不能使赋值运算符显式。

Can this s = 97 implicit conversion be avoided/stopped?

一般来说,不,因为它对于 std::string 是完全合法的。当你打电话时:

basic_string& operator=( CharT ch );

with 97 然后 97 类型为 int 被转换为 charoperator = 执行。

So, why is g++ enable to compile this and clang doesn't?

很可能,您尝试在没有C++11 支持的情况下使用clang 编译您的程序。

关于c++ - 对字符串 C++ 的模糊整数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44795637/

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