草庐IT

conditional-operator

全部标签

c++ - 为什么 operator= 返回引用而不是 const 引用

最初的问题与重载operator=有关,我想分享我的发现,因为找到它们对我来说很重要。我无法想象将(a=b)用作左值的合理示例。在IRC和谷歌的帮助下,我找到了下一篇文章:http://msdn.microsoft.com/en-us/magazine/cc301415.aspx它提供了两个示例。(a=b)=cf(T&);f(a=b)但两者都不太好,我认为这是不好的做法。第二个给我同样的感觉。您能否提供更多好的示例,说明为什么它应该是非常量? 最佳答案 一个很好的理由是标准中要求类X在标准容器中可用的要求之一是表达式a=b必须具有类

c++ - operator << - 如何检测最后一个参数

我正在用C++编写一个日志类。这个类是一个单例。我想以这种方式添加日志:Log::GetInstance()好的,在一个Log对象中,我想在最后一个参数出现时保存整行(本例中为“在类foo”中)。如何检测最后一个我不使用任何结束标签。 最佳答案 你可以通过不使用单例来解决这个问题。如果您创建这样的函数:Loglog(){returnLog();}您几乎可以像以前一样添加日志:log()不同之处在于Log对象的析构函数在此行之后被调用。所以现在您有办法检测最后一个参数何时被处理。 关于c+

c++ - 在 C++ 中用 for(;condition;) 替换 while(condition) 有什么理由吗?

看起来像while(condition){//dostuff}完全等同于for(;condition;){//dostuff}是否有任何理由使用后者而不是前者? 最佳答案 据我所知,没有好的理由。您使用不增加任何内容的for循环是故意误导人们。更新:根据OP对问题的评论,我可以推测您如何在实际代码中看到这样的结构。我以前见过(并使用过)这个:lots::of::namespaces::container::iteratoriter=foo.begin();for(;iter!=foo.end();++iter){//dostuff}

c++ - 为什么 C++ 不为枚举类型提供默认的 "operator>>"函数?

我发现C++提供了默认的operatorenum的函数类型:#includeusingnamespacestd;enumOpType{Select,Insert};intmain(){OpTypet=Select;cout运行结果为:0虽然不提供默认operator>>功能:#includeusingnamespacestd;enumOpType{Select,Insert};intmain(){OpTypet=Select;cin>>t;return0;}构建它会产生以下编译错误:prog.cpp:Infunction‘intmain()’:prog.cpp:11:6:error:n

C++ Armadillo : GCC vs VC++2013: Operator () and overloading

我正在尝试使用ArmadilloC++库开发Linux/Win64应用程序。以下代码在GCC-4.7中编译,但在使用Armadillo提供的VS项目文件的VisualStudio2013中编译失败。#include#include"armadillo"usingnamespacearma;usingnamespacestd;//worksinGCC-4.7//VC++2013:compileerror:C3066voidfoo1(vec::fixed&bar){bar(1)=1.;}//worksvoidfoo2(vec::fixed&bar){bar.at(2)=1.;}//work

C++11 operator""with double parameter

考虑:structstr{};stroperator""_X(longdoubled){returnstr();}这在g++4.7.2Wallstd=c++11下编译得很好但现在如果我给双倍:stroperator""_X(doubled){returnstr();}我收到以下错误消息:main.cpp|3|错误:'stroperator""_X(double)'的参数列表无效问题是什么?这与“无法重新定义内置文字后缀的含义”(StroustrupFAQ)有关吗?您能想出解决方法吗? 最佳答案 Whatistheproblem?问题

C++ 为中间件生成的类型提供 `operator<<` 的通用方法

我们使用中间件为我们生成各种编程语言(包括C++)的类型。对于为C++生成的结构,我想注入(inject)可用于各种数据转换的代码,例如输出到std::ostream.假设我们生成了以下结构:structFoo{inta;doubled;};假设我更改了中间件编译器以生成以下模板函数:templatevoidvisit(Visitor&v,constFoo&data){v.visit("a",data.a);v.visit("d",data.d);}现在我可以以各种方式使用这段代码,如果不使用它应该不会影响任何东西,例如makestd::ostream::operator:struct

c++ - std::condition_variable::wait_until 相对于 std::this_thread::sleep_for 有什么优势吗?

在时间等待场景中:oursoftwareworksinthebackground,andsynchronizesdatawiththeserverinevery20-30minutes.我想用std::this_thread::sleep_for但我的上级强烈反对任何形式的sleep功能。他推荐std::condition_variable::wait_until(lock,timeout-time,pred)不知道在这种情况下sleep_for有什么缺点吗? 最佳答案 正如评论中已经指出的那样,这仅取决于您的用例。两者之间的主要区

c++ - 重载 'operator++' 必须是一元或二元运算符(有 3 个参数)

我有一个头文件和一个.cpp文件。我正在尝试实现前缀和后缀运算符重载,但在设置重载时我一直收到此错误。分数.h#ifndefFRACTION_H#defineFRACTION_H#includeusingnamespacestd;classFraction{public:Fraction();Fraction(int,int);intgetTop(){returnm_top;}intgetBottom(){returnm_bottom;}voidset(intt,intb){m_top=t;m_bottom=b;reduce();}protected:private:voidreduc

c++ - std::condition_variable::wait with predicate

在std::condition_variable的文档中,有一个以谓词函数作为参数的wait()重载。该函数将等到谓词函数为真的第一个wake_up。在documentation据说这等同于:while(!pred()){wait(lock);}还有:Thisoverloadmaybeusedtoignorespuriousawakeningswhilewaitingforaspecificconditiontobecometrue.Notethatbeforeentertothismethodlockmustbeacquired,afterwait(lock)exitsitisals