草庐IT

C++语法歧义

全部标签

c++ - 将右移运算符用作模板参数时出现语法错误

如果我采用右移运算符的地址并将其作为模板参数传递,则右移符号会被误读为模板参数列表的末尾,由此产生的混淆会导致多个错误。templatestructTemplateMagic{};structTestStruct{voidoperator>>(int){}};intmain(){//Alltheerrorsareonthisline:TemplateMagic>>*ptr;}在MicrosoftVisualStudioExpress2013forWindowsDesktop中运行版本12.0.31101.00更新4出现以下错误:errorC2143:syntaxerror:missin

c++ - 在构造函数初始化列表中使用 placement new 的语法是什么

假设我有一个类classMyClassintbuf[10];public:MyClass(inti){new(&buf)OtherClass(i);//Howtomovethistoconstructorinitializelist?}只需将该行复制到之后的位置:不起作用。 最佳答案 我不确定您将如何使用构造的对象;我想MyClass有一个指向对象的数据成员指针,然后像这样初始化指针:classMyClass{intbuf[10];OtherClass*p;public:MyClass(inti):p(new(&buf)OtherC

ElasticSearch语法

适用于ES7.X一、索引管理1.创建索引PUT/index_name{"settings":{"number_of_shards":2,"number_of_replicas":1},"mappings":{"properties":{"id":{"type":"integer"},"name":{"type":"keyword"},"age":{"type":"long"},"desc":{"type":"text"},"birthday":{"type":"date"}}}}settings设置有好多,上面只写了分片和副本数量。2.修改索引字段注:只能新增字段,不能删除字段POST/ind

c++ - 资格调整(const/volatile)可能导致歧义

谁能帮我理解为什么当getter是const时下面的代码无法编译(VS2010)?测试代码如下:#includeclasssocket{public://setter-throwexceptionversionvoidnon_blocking(boolmode){//...}//getter-errorcodeversionboolnon_blocking(boost::system::error_code&ec)const{//...}//setter-errorcodeversionvoidnon_blocking(boolmode,boost::system::error_cod

取消引用类成员变量的 C++ 语法

这更像是一个语法优雅的问题,但我正在学习C++并在玩弄指针。如果我有一个类Car,我可以创建一个指向该类新实例的指针,方法是Car*Audi=newCar;如果那个类有一个成员变量weight(比如一个unsignedint),我可以用任何一个访问它(*Audi).weight或Audi->weight如果那个类有一个成员变量age本身就是一个指针,我可以用任何一个访问它*((*Audi).age)或*(Audi->age)除了这两种(诚然不是特别复杂的)取消引用指针的方法之外,还有其他方法吗?我想想想Audi->*age可以用,可惜不行。(我很欣赏访问器通常更可取,我只是感兴趣。)

c++ - 动态分配二维智能指针数组的语法

我需要动态分配一个二维智能指针数组,但它的语法让我感到困惑。我需要它是动态的:std::unique_ptrmyArray[size1][size2];因此据我了解,我创建了一个指向该类型指针的指针:someClass**myArray;//actaullythetypeisstd::unique_ptrbutI'lljustkeepitsimple然后分配它:myArray*=newsomeClass*[size1];for(inti=0;i但这并没有使用智能指针,这意味着我以后必须手动删除它,而且我不知道如何使这些指针成为智能指针;类型是std::unique_ptr但我需要一个指

智能小程序框架——模块化语法参考(ESModule 语法、CommonJS 语法)

小程序的逻辑代码使用JavaScript语法进行编写。可以将一些公共的代码抽离成为一个单独的js文件,作为一个模块,以实现逻辑共享复用。主要有ESModule和CommonJS两种形式。一个项目内应保持使用一种语法形式,否则可能出现导入异常的情况。ESModule语法(推荐)ESModule模块功能主要由两个命令构成:export 和 import。export命令用于规定模块的对外接口,import 命令用于输入其他模块提供的功能。export命令一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用 export 关键字输出该变

C++:专门化成员需要 «template<>» 语法

我做错了什么?templateclassBinder{public:staticstd::vector*>all;Node*from;Node*to;Binder(Node*fnode,Node*tonode){from=fnode;to=tonode;Binder::all.push_back(this);}};std::vector*>Binder::all=std::vector*>();//hereitis谢谢。 最佳答案 静态成员的定义被编译器解释为一个特化(实际上,它是一个特化:你给出了一个特定于T=int的声明)。这可

c++ - 如何避免语法相同的 const 和语义不相同的非 const 函数之间的代码重复

#includeusingnamespacestd;classA{public:A():x(0){}//notice:notidenticaltoconstversionbutdoesupdatevoidFA(){std::cout首先,对于冗长的标题感到抱歉。如何避免函数FC,FCconst中类C中的代码重复?鉴于您不能使用将this转换为const并从非constFC版本调用constFC版本的技巧,因为非constFC的主体实际上将调用以下函数将进行更新,并且与它们相应的常量不相同。 最佳答案 让模板成员函数完成实际工作。换句

c++ - 消除 std::vector<std::string> 的列表初始化歧义

我的代码中有一个带有类型签名的重载函数:voidfoo(std::string);voidfoo(std::vector);我希望foo的用户能够使用字符串或字符串列表来调用它//Usecase1foo("str");//Usecase2foo({"str1","str2","str3"});foo({"str1","str2","str3","str4"});问题是当调用者将两个字符串传入foo的初始化列表时。//Problem!foo({"str1","str2"});这个对foo的调用是不明确的,因为它匹配两个类型签名。这是因为显然{"str1","str2"}是std::str