Tag: 运算符重载

当重载operator <<时,std :: endl是未知的types

我重载了operator << template <Typename T> UIStream& operator<<(const T); UIStream my_stream; my_stream << 10 << " heads"; 作品,但是: my_stream << endl; 给汇编错误: 错误C2678:二进制'<<':找不到操作符findtypes为'UIStream'的左手操作数(或没有可接受的转换) 什么是使my_stream << endl工作的工作?

在JavaScript中重载算术运算符?

考虑到这个JavaScript的“类”定义,这是我能想到的最好的方法: var Quota = function(hours, minutes, seconds){ if (arguments.length === 3) { this.hours = hours; this.minutes = minutes; this.seconds = seconds; this.totalMilliseconds = Math.floor((hours * 3600000)) + Math.floor((minutes * 60000)) + Math.floor((seconds * 1000)); } else if (arguments.length === 1) { this.totalMilliseconds = hours; this.hours = Math.floor(this.totalMilliseconds / 3600000); this.minutes = Math.floor((this.totalMilliseconds % 3600000) / […]

我应该如何编写符合ISO C ++标准的自定义新的和删除操作符?

我应该如何编写符合ISO C ++标准的自定义new和delete操作符? 这是在重载 C ++ FAQ, 运算符重载及其后续操作中重载new和delete的延续, 为什么要replace默认的new和delete运算符呢? 第一部分:编写符合标准的new操作符 第1部分:了解编写自定义new操作符的要求 第2部分:了解new_handler要求 第3部分:了解特定场景要求 第二部分:编写符合标准的delete操作符 实现自定义删除操作 (注意:这是一个Stack Overflow的C ++常见问题解答的入口,如果你想批评在这个表单中提供FAQ的想法,那么在这个开始所有这些的meta上的贴子将是这个地方的答案。那个问题在C ++聊天室中进行监控,常见问题解决scheme首先出现,所以你的答案很可能会被那些提出这个想法的人阅读)。 注意:答案是基于Scott Meyers的“更有效的C ++”和ISO C ++标准的学习。

为什么Java不提供运算符重载?

从C ++到Java,一个显而易见的未解决的问题是为什么Java没有包含运算符重载? 不是Complex a, b, c; a = b + c; Complex a, b, c; a = b + c; 比Complex a, b, c; a=b.add(c);简单得多Complex a, b, c; a=b.add(c); Complex a, b, c; a=b.add(c); ? 这是否有一个已知的原因,不允许运算符重载的有效参数? 原因是武断的,还是失去了时间?

为模板类重载friend operator <<

我已经阅读了几个有关我的问题在stackoverflow现在,似乎没有解决我的问题。 或者我也许做错了…重载的<<如果我把它变成一个内联函数。 但是我怎么让它在我的情况下工作? warning: friend declaration std::ostream& operator<<(std::ostream&, const D<classT>&)' declares a non-template function warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning /tmp/cc6VTWdv.o:uppgift4.cc:(.text+0x180): undefined reference to operator<<(std::basic_ostream<char, std::char_traits<char> >&, D<int> const&)' collect2: ld returned […]

运算符在Java中重载

请问你能告诉我是否有可能在Java中重载运算符? 如果它在Java的任何地方使用,请告诉我。

漂亮的C ++ STL容器

请注意这篇文章末尾的更新。 更新:我已经在GitHub上为这个库创build了一个公共项目 ! 我想有一个单一的模板,一劳永逸地照顾漂亮的打印所有STL容器通过operator<< 。 在伪代码中,我正在寻找这样的东西: template<container C, class T, String delim = ", ", String open = "[", String close = "]"> std::ostream & operator<<(std::ostream & o, const C<T> & x) { o << open; // for (typename C::const_iterator i = x.begin(); i != x.end(); i++) /* Old-school */ for (auto i = x.begin(); […]

一个正面的lambda:'+ {}' – 这是什么巫术?

在堆栈溢出的问题重新定义在C ++ 11不允许的lambdas,为什么? ,一个小程序不能编译: int main() { auto test = []{}; test = []{}; } 问题得到解答,一切似乎都很好。 然后来到Johannes Schaub ,做了一个有趣的观察 : 如果你在第一个lambda之前加上+ ,神奇地开始工作。 所以我很好奇:为什么下面的工作? int main() { auto test = +[]{}; // Note the unary operator + before the lambda test = []{}; } 它用GCC 4.7+和Clang 3.2+编译得很好。 代码标准是否符合?

如何正确地重载ostream的<<运算符?

我正在用C ++写一个矩阵运算的小型矩阵库。 然而,我的编译器抱怨,之前没有。 这个代码被放置在一个架子上6个月,之间我升级我的电脑从debian蚀刻到lenny(g ++(Debian 4.3.2-1.1)4.3.2),但是我有相同的问题,在Ubuntu系统相同的g ++ 。 这是我的矩阵类的相关部分: namespace Math { class Matrix { public: […] friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix); } } 而“实施”: using namespace Math; std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) { […] } 这是编译器给出的错误: matrix.cpp:459:error:'std :: ostream&Math :: Matrix :: operator <<(std :: ostream&,const Math :: Matrix&)'必须只有一个参数 […]