草庐IT

expose_used

全部标签

c++ - typedef 和 using 会导致模板实例化吗?

假设我有一个这样定义的模板类templateclassTemp{//irrelevant};我可以隐式或显式实例化它:Tempti;templateclassTemp;通过显式实例化,我的程序应该包含一个实例,即使我以后不使用它(假设它没有被编译器优化省略)。我的问题是,下面的语句会导致类的实例化吗?typedefTempTShort;usingTFloat=Temp;//C++11 最佳答案 没有。Implicitinstantiation仅在需要完全定义的类型时才会发生;而类型别名则不必。Whencodereferstoatem

c++ - using 声明是否应该隐藏继承的虚函数?

structlevel0{virtualvoidfoo()=0;};structlevel1:level0{virtualvoidfoo(){coutfoo();level3l3;l3.foo();return0;}上面的代码使用gcc给出了level2level1但在icc中给出level2level2哪个是正确的还是标准未定义?编辑:这证明肯定存在错误,考虑以下主要功能intmain(){level3l3;l3.foo();//Thisprintslevel1level3*pl3=&l3;pl3->foo();//Thisprintslevel2level3&rl3=l3;rl3.

c++ - auto using parens 可以表示函数原型(prototype)吗?

这个问题是由于无法对auto使用统一初始化语法而产生的。关键字,因为它将其视为std::initializer_list(评论中的解释here)。以下面的代码为例:classX{};intx(X());//functionprototype(1)autox(X());//copy/moveconstructionofanX,functionprototypeorcompile-timeerror?编译器对autox做了什么?每种可能性的推理:复制/移动构造:我认为这是正确的行为,因为(1)被视为一种缺陷。函数原型(prototype):似乎不太可能,因为没有尾随返回类型。编译时错误:如

c++ - 用已知数量的元素填充 vector : specify its size in constructor or by using reserve method?

我想通过从流中读取单个元素来创建某种复杂类型的vector。我提前知道vector大小。是在vector构造函数中指定元素个数更好,还是使用reserve方法更好?这两个哪个更好?intmyElementCount=stream.ReadInt();vectormyVector(myElementCount);for(inti=0;i或intmyElementCount=stream.ReadInt();vectormyVector;myVector.reserve(myElementCount);for(inti=0;i如果我只是创建一个intvector或其他一些简单类型呢?

c++ - "using"能否在所有情况下完全替换 "typedef"?

我知道using可以做typedef做不到的事情。我只是想知道使用是否可以在所有情况下完全替代typedef? 最佳答案 是的,引用自draftStandard(大胆强调我的)7.1.3typedef说明符[dcl.typedef]2Atypedef-namecanalsobeintroducedbyanalias-declaration.Theidentifierfollowingtheusingkeywordbecomesatypedef-nameandtheoptionalattribute-specifier-seqfollow

c++ - 编译器没有实现 "using typename"指令吗?

我有一些看起来像这样的代码:namespacemyLibrary{classA{public:structNested{...};...};}在代码的其他部分,我需要访问A。因为我喜欢可读性代码,所以我也喜欢using指令:usingmyLibrary::A;...Aa;现在,在某些时候我还需要访问我的嵌套类,所以我想写这样的东西:usingmyLibrary::A::Nested;显然,编译器无法知道这是一个嵌套类而不是类成员,因此报错:error:usingdeclarationcannotrefertoclassmember我不明白的是为什么这不能解决问题:usingtypena

c++ - 可以将 "using std::swap;"放在 header 中吗?

我读到过,当你在C++中交换东西时,你应该总是使用std::swap;,然后调用swap不合格,因此它会自动为std::和内置类型选择std::的,为自定义类型选择自定义的,以及模板化的std::一个用于其他一切。那么,我是否可以将usingstd::swap;放在每个文件包含的header中而不必担心它?我知道避免在header中使用是常见的做法。但是,在这种特殊情况下它有问题吗? 最佳答案 swap的指导是使用std::swap在尽可能局部的范围内。可以肯定的是,广泛包含的头文件中的一个不满足此要求。它仍然以意想不到的方式污染了

C++11/g++:lambda 中需要 std::qualifier,尽管给出了 "using namespace std"

我试图发现新的C++11标准(使用g++4.6.2)的一些优点。在“all_of”算法函数中使用lambda时,我遇到了一个关于std::限定符的奇怪问题。我正在“使用”代码片段开头所示的std命名空间。这使得for循环中pair变量的声明定义明确。但是,我在“all_of”算法中使用的lambda参数中尝试了相同的方法。在我意识到完整的std::合格的std::pair可以在那里工作,但只有pair不行之前,我遇到了几个难以理解的错误消息。我是否遗漏了重要的一点?lambda的声明发生在这个文件中,所以命名空间在这里应该仍然有效,对吧?或者所需的std::限定符是否依赖于不同文件中的

c++ - 'Attempting to upgrade input file specified using deprecated transformation parameters' 是什么意思?

我目前正在尝试使用Caffe训练我的第一个网络。我得到以下输出:caffetrain--solver=first_net_solver.prototxtI051509:01:06.57771015331caffe.cpp:117]UseCPU.I051509:01:06.57801415331caffe.cpp:121]StartingOptimizationI051509:01:06.57809715331solver.cpp:32]Initializingsolverfromparameters:test_iter:1test_interval:1base_lr:0.01displ

c++ - Visual Studio 2015 "non-standard syntax; use ' &' to create a pointer to member"

我正在尝试用C++实现自己的链表,但终究无法弄清楚为什么会出现此错误。我知道有一个STL实现,但出于某种原因,我正在尝试自己的实现。这是代码:#includetemplateclassListElement{public:ListElement(constT&value):next(NULL),data(value){}~ListElement(){}ListElement*getNext(){returnnext;}constT&value()const{returnvalue;}voidsetNext(ListElement*elem){next=elem;}voidsetValu