草庐IT

C++语法歧义

全部标签

c++ - 以不同的方式克服菱形歧义

我知道菱形继承(钻石问题)和使用虚拟基类解决它的方法。我试图以不同的方式解决菱形继承(钻石问题)但没有成功。我不知道为什么。#includeusingnamespacestd;classA{public:voiddisplay(){cout由于不继承私有(private)成员,D类不会从C继承任何函数,当D类继承B类和C类时,D中应该只有1个display()函数。但是当我尝试访问display()函数使用类D的对象,显示了同样的问题,显示函数不明确。 最佳答案 “不继承私有(private)成员”是一个错误的前提,这不是Java。

c++ - 运算符重载中的 C++ 语法不清晰

我对C++还是个新手,正在尝试理解表达式模板。我在Wikipedia上看到了一个示例代码.我了解大部分程序及其工作原理,但我不清楚编译器如何解释这些行:operatorA&(){returnstatic_cast(*this);}operatorAconst&()const{returnstatic_cast(*this);}来自下面的基本表达式模板类。通常运算符重载的语法是return_datatypeoperator+(args){body}(例如for+operator)但是这会产生错误并且函数中的那些编译没有任何错误。谁能解释一下这两行?运算符之前的A&和Aconst&是做什么

c++ - 双右尖括号 (>>) 在特定情况下会产生语法错误

Eclipse(Luna,4.4.2)告诉我以下行有语法错误:static_cast>(a.mul(b));我记得双右尖括号>>>会导致某些编译器出现问题,所以我在中间放了一个空格:>>。语法错误消失。但是我的程序中有很多>>>没有检测到语法错误,例如:Node>*e=a.get();为什么在上述特定情况下会出现错误?这不是error:'varName'wasnotdeclaredinthisscope的拷贝,因为我特别询问为什么我的编译器有时会接受>>>,但并非总是如此。 最佳答案 您已经使用了c++11之前的标准编译器。旧标准在

Python速成篇(基础语法)上

引言都是我手欠非要报什么python的计算机二级,现在好了假期不但要冲C艹,还要学个python,用了几天的时间速成了一下python的基础语法,其实在学会C的基础上,py学起来是非常的快啊。这篇博客呢,建议有一定语言基础的朋友来看。没有接触过编程的朋友可以先看看python相关书籍或视频从0到1学,这里我推荐蟒蛇的python,浅显易懂。那么就开始接下来的正文内容吧。Python环境配置想要进行Python开发,就要搭建好Python的环境需要安装的环境主要是两个部分:运行环境:Python开发环境:Pycharm安装Python(1)找到官方网站认准这个英文标了官方的网站,别的什么中文版官

c++ - 来自 Boost.Spirit 语法的属性:来自 std:vector of boost::variant 的错误

我有一个用于读取棋盘游戏位置描述的工作解析器(国际跳棋,officialgrammar):#include#includenamespacex3=boost::spirit::x3;autoconstcolon=x3::lit(':');autoconstcomma=x3::lit(',');autoconstdash=x3::lit('-');autoconstdot=x3::lit('.');autoconstking=x3::char_('K');autoconstcolor=x3::char_("BW");autoconstnum_sq=x3::int_;autoconstnu

c++ - 指向成员函数语法的奇怪指针

我了解如何声明函数的类型:typedefvoid(typedef_void_f)();//typedef_void_fisvoid()usingalias_void_f=void();//alias_void_fisvoid()它可以用来声明函数指针:voidfunction(){std::cout对于成员函数指针,语法稍微复杂一些:structS{voidfunction(){std::cout这是我对C++中函数指针的理解,我认为这已经足够了。但是在p0172r0technicalpaper我发现了一个我不熟悉的语法:structhost{intfunction()const;};

c++ - 使用来自 Boost.Spirit 的 Lex 和 Qi 在语法规则中使用词法分析器标记属性

让我们考虑以下代码:#include#include#include#include#include#include#include#includenamespacelex=boost::spirit::lex;namespaceqi=boost::spirit::qi;namespacephoenix=boost::phoenix;structoperation{enumtype{add,sub,mul,div};};templateclassexpression_lexer:publiclex::lexer{public:typedeflex::token_defoperator_

c++ - const T*& 和 const T* 不会在函数重载时产生歧义

为什么下面的示例代码不会产生歧义有没有办法调用第二个版本?(如果这不是错误)#includeusingnamespacestd;voidfoo(constint*){cout编辑:这个#includeusingnamespacestd;voidfoo(constint){cout确实会产生歧义。顺便说一下,去掉const产生的歧义。编译器:带有标志--std=c++14的g++5.3.0 最佳答案 Whythefollowingsamplecodedonotproduceambiguity这不是错误。参数的类型是constint*&

c++ - 带有尾随返回类型的 final、override、const 的语法

我正在尝试覆盖虚拟,但也使用关键字override、final和const,以及尾随返回类型。问题似乎出在派生类中,编译器错误(说我没有指定尾随返回类型)并没有太大帮助。代码在这里:https://wandbox.org/permlink/zh3hD4Ukgrg6txyE也贴在下面。我玩过不同的顺序,但似乎仍然无法正确处理。任何帮助将不胜感激,谢谢。#includeusingstd::cout;usingstd::endl;usingstd::ostream;////////////////////////////////////////////////BasestuffclassBa

c++ - 应用于类型别名声明的 [[maybe_unused]] 属性的语法

尝试找出[[maybe_unused]]属性的正确语法导致了followingcode:intmain(){typedefintX;//warning[[maybe_unused]]typedefintY;//OkusingZ=int;//warning//[[maybe_unused]]usingW1=int;//error:expected';'before'using'//using[[maybe_unused]]W2=int;//error:expectednested-name-specifierbefore'['tokenusingW3[[maybe_unused]]=in