草庐IT

has_equal_operator

全部标签

c++ - 为什么 std::map::operator[] 如此违反直觉?

在我看来,通常用于访问数据结构的运算符突然被定义为将数据插入数据结构,这在我看来是“邪恶的”(在C++FAQ中这个词的含义)。我想问题是“什么会更好”?对于某些类型的映射值,这个问题很容易回答;例如,如果我们将键映射到指针,您可能真的希望operator[]为不存在的键返回nullptr,但这显然不适用于其他类型。它可以在不存在的键上抛出异常,或者甚至默认构造一个临时的并返回它而不将它添加到映射中。对于这种容器类型,将[]从读取语义转换为写入语义的充分理由是什么? 最佳答案 基本问题是没有可靠区分的句法方式:dosomething(

c++ - 使用 operator<<? 根据某些条件打印不同类型的不同值

假设我想打印数字参数(如果它们>1)或“无”(如果它们cout1)cout但我无法链接运算符(operator)。理想情况下,我希望能够执行以下操作:cout1?argc-1:"none"但这是不可能的,因为三元if的类型不同。想法? 最佳答案 简单的方法。用字符串处理。std::cout1?std::to_string(argc-1):"none")更改字符串会产生一些多余的成本。但是如果使用一次就容易阅读和维护。需要括号的原因是移位运算符()。 关于c++-使用operator

python - "Error: '::hypot ' has not been declared"在 cmath 中尝试嵌入 Python

在尝试使用#include将Python嵌入我的程序时遇到一些问题之后,我终于找到了所有正确的库,但我还有另一个错误。当我尝试使用#include进行编译时它会将我重定向到code::blocks目录中的cmath,并在显示using::hypot;的行放置一个错误标记并说:error:'::hypot'hasnotbeendeclared.我不知道为什么这是一个错误,特别是因为我的code::blocks安装时出现了这个错误,并且出现了,我想是因为Python试图包含它。我在Windows上,使用的是最新版本的Python(3.4.2) 最佳答案

c++ - 模板和类型转换运算符(operator)

此代码可在CodeGear2009和VisualStudio2010中编译,但不能在gcc中编译。为什么?classFoo{public:operatorint()const;templateTget()const{returnthis->operatorT();}};Foo::operatorint()const{return5;}错误信息是:test.cpp:在成员函数`TFoo::get()const'中:test.cpp:6:错误:“constclassFoo”没有名为“operatorT”的成员 最佳答案 这是G++中的错

c++ - 替代 ->operator()

如果objp是指针,是否有比调用objp->operator()(x,y,z)更好的语法?&objp(x,y,z)不起作用。由于所有的符号,这很难用谷歌搜索。抱歉,这很愚蠢。 最佳答案 您可以使用(*objp)(x,y,z);作为替代。 关于c++-替代->operator(),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31757675/

c++ operator= const 引用的方法

我正在用这样的const引用编写类:classB;classfoo{constB&b;foo(constB&newb):b(newb){}voidoperator=(constfoo&foo2){//Thisdoesnotworkfoo.b=foo2.b;}};我正在尝试定义一个有效的运算符=显然=不起作用,因为不允许我更改const引用。这有办法让引用指向另一个对象吗?如果b不是const,C++将为我提供一个有效的operator=。如果我将一个成员定义为constcl将吐出:警告C4512:“foo”:无法生成赋值运算符 最佳答案

c++ - 我在以下函数中收到错误 no match for operator >>。怎么了?

voidGetarrayElements(inta[]){intk=0;while(true){cout>a[k]>>endl;if(a[k]=0){k+=1;}else{break;}}}我试图将0到100之间的一些输入值读入一个数组,但我收到了这个错误。“不匹配运算符>>”。有什么问题吗? 最佳答案 endl只能应用于cout等输出流;你不能在cin上使用它。 关于c++-我在以下函数中收到错误nomatchforoperator>>。怎么了?,我们在StackOverflow上找到

c++ - 二进制 '==' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)

我正在编写一个比较std::strings的模板类函数。std::string是模板参数。我的问题是我无法用“==”运算符比较两个const字符串,然后我想我创建了两个非常量临时字符串变量来执行比较,但它仍然无法编译。不知道为什么。类VGraph被实例化为VGraphmyGraph;templatesize_tVGraph::find(constV&vert){Vtemp=vert;//(1)for(size_ti=0;i相关函数原型(prototype)templateconstV&VVertex::getVertex(); 最佳答案

C++11 static assert for equality comparable type?

如何static_assert模板类型是C++11中的EqualityComparable概念? 最佳答案 您可以使用以下类型特征:#includetemplatestructis_equality_comparable:std::false_type{};templatestructis_equality_comparable()==std::declval(),(void)0)>::type>:std::true_type{};您将以这种方式进行测试:structX{};structY{};booloperator==(Xcon

c++ - ostream::write 或 ostream::operator<< 在什么情况下会失败?

在我的C++代码中,我不断地将不同的值写入文件。我的问题是,考虑到文件已成功打开这一事实,如果在任何情况下write或 最佳答案 失败原因太多,无法一一列举。可能的是:分区终于满了用户超出了他的磁盘配额分区已被粗暴地卸载分区已损坏(文件系统错误)磁盘发生物理故障...DoIneedtocheckeverysinglecallofwriteor如果您希望您的程序对故障具有弹性,那么肯定会。如果您不这样做,则仅表示您正在写入的数据可能会或可能不会被写入,这等于说您不关心它。注意:您可以设置std::ostream::exceptions