gpt4 book ai didi

c++ - std::setw、std::setfill 等的真正返回类型是什么?

转载 作者:行者123 更新时间:2023-11-30 01:05:11 29 4
gpt4 key购买 nike

我很好奇 std::setw 和 std::setfill 的真正返回类型

正如我们所见,它们返回值的数据类型是“未定义”。但是,是否可以声明一个没有返回类型的函数?

在我必须开发一种方法为“cout”或“cin”提供扩展功能的情况下,这个方法应该像这样调用

cout << foo(32, 'A', 0.00f) << "Hello world!";

我应该如何声明方法?

最佳答案

std::setw 的返回类型et al 是未指定的,因为每个 C++ 实现可能决定以不同的方式执行它,因此没有唯一的答案 - 您必须调查您感兴趣的编译器/版本。

查看与 GCC 一起使用的 libstdc++,我们看到:

00214   struct _Setw { int _M_n; };
00215
00216 /**
00217 * @brief Manipulator for @c width.
00218 * @param n The new width.
00219 *
00220 * Sent to a stream object, this manipulator calls @c width(n) for
00221 * that object.
00222 */
00223 inline _Setw
00224 setw(int __n)
00225 { return { __n }; }

_Setw是一个捕获宽度参数的小结构,std::ostream& operator<<(std::ostream&, _Setw)...>>...然后可以处理设置流中的宽度:

00227   template<typename _CharT, typename _Traits>
00228 inline basic_istream<_CharT, _Traits>&
00229 operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f)
00230 {
00231 __is.width(__f._M_n);
00232 return __is;
00233 }
00234
00235 template<typename _CharT, typename _Traits>
00236 inline basic_ostream<_CharT, _Traits>&
00237 operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f)
00238 {
00239 __os.width(__f._M_n);
00240 return __os;
00241 }

As we see references, their datatype of return value is "undefined".

未指定,不是未定义。

However, Is it possible to declare a function without return type?

否 - 每个函数都必须有一个返回类型,即使只有 void .

In a situation that I have to develop a method supplying extended features for 'cout' or 'cin', and this method should be called like

cout << foo(32, 'A', 0.00f) << "Hello world!";

How should I declare the method?

你可以做类似的事情并且有功能 foo返回您为其编写流操作符的对象。然后那些流函数应该操纵流:你需要使用 iword xalloc 为流提供额外的状态以跟踪您要添加的可能修改的行为 - 请参阅 this answer .

关于c++ - std::setw、std::setfill 等的真正返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48958066/

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