小编Rak*_*kib的帖子

C++:char**到const char**转换

在C++中,为什么不能将a char**作为参数传递给接受的函数const char**,当转换为char*to时const char*,如下所示

void f1(const char** a)
{

}

void f2(const char* b)
{

}

int main(int argc, char const *argv[])
{
   char* c;

   f1(&c); // doesn't work
   f2(c); //works

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器输出是

test.cpp: In function 'int main(int, const char**)':
test.cpp:15:10: error: invalid conversion from 'char**' to 'const char**' [-fpermissive]
test.cpp:1:6: error:   initializing argument 1 of 'void f1(const char**)' [-fpermissive]

c++ types

24
推荐指数
1
解决办法
1万
查看次数

返回一个空向量c ++

要求是我需要搜索向量以查看它是否包含作为参数传入的值.如果值存在于向量中,则返回向量.否则,我返回一个空矢量.我不知道如何在c ++中返回一个空向量.希望你能帮助我.我的mimic.h:

vector<Pair> map;
Run Code Online (Sandbox Code Playgroud)

我的Pair.h:

    Pair(){
}
~Pair(){}
string prefix;
vector<string> sufix;
Run Code Online (Sandbox Code Playgroud)

返回向量函数:

vector<string> Mimic::getSuffixList(string prefix){  
  int find=0;
  for(int i =0; i < map.size(); i++)
  {
   if(map[i].prefix == prefix)
   {

        find =1;
        return map[i].sufix; //sufix is a vector from a class called "Pair.h"
    }

   }
   if(find==0)
   {
         //return an empty vector. 
   }

  }
Run Code Online (Sandbox Code Playgroud)

c++ return vector object

21
推荐指数
1
解决办法
4万
查看次数

将函数的返回值赋给参考c ++?

这是一个两部分问题.可以将函数的返回值赋给引用吗?如

Foo FuncBar()
{
    return Foo();
}

// some where else
Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)

这个可以吗?我的理解是FuncBar()返回一个Foo对象,现在myFoo是对它的引用.

问题的第二部分.这是优化吗?因此,如果你在一个循环中这样做很多时候做得更好

Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)

要么

Foo myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)

并且考虑到变量的使用,不会使用ref需要更慢的解引用?

c++ return reference

16
推荐指数
1
解决办法
8746
查看次数

为什么这个虚拟析构函数会触发一个未解析的外部?

考虑以下:

Xh:

class X
{
    X();
    virtual ~X();
};
Run Code Online (Sandbox Code Playgroud)

X.cpp:

#include "X.h"

X::X()
{}
Run Code Online (Sandbox Code Playgroud)

尝试构建这个(我使用的是.dll目标,以避免在丢失的main上出现错误,我正在使用Visual Studio 2010):

错误1错误LNK2001:未解析的外部符号"private:virtual __thiscall X :: ~X(void)"(?? 1X @@ EAE @ XZ)

然而,小的修改导致成功构建:

XH:

class X
{
    inline X(); // Now inlined, and everything builds
    virtual ~X();
};
Run Code Online (Sandbox Code Playgroud)

要么

XH:

class X
{
    X();
    ~X(); // No longer virtual, and everything builds
};
Run Code Online (Sandbox Code Playgroud)

当.dtor是虚拟的或者.ctor没有内联时,是什么导致链接器中未解析的外部?

编辑:

或者,或许更有趣的是,如果我将析构函数设置为非虚拟,或者如果我内联构造函数,为什么我没有得到未解析的外部?

c++ destructor virtual-functions unresolved-external

15
推荐指数
3
解决办法
1万
查看次数

带有typeid的逗号运算符

我正在研究一种通用的非侵入式智能指针实现.我在第4节中有些困惑.一个声明是

仅当结果类型是多态类类型的左值时,才计算作为typeid运算符的参数提供的表达式.

相关的示例代码是:

template<typename T>
  void* startOfObject(T* p) {
  void* q=static_cast<void*>(p);
  typeid(q=dynamic_cast<void*>(p),*p); // This line
  return q;
}
Run Code Online (Sandbox Code Playgroud)

AFAIU,它意味着q=dynamic_cast<void*>(p)如果结果类型多态类类型左值,则将对其进行评估.该结果意味着评价的结果dynamic_cast<void*>(p)(我想),所以dynamic_cast在任何情况下被应用.文章陈述(据我所知),如果p不是多态的dynamic_cast就不会应用,但为什么呢?在应用它之前,如何知道结果是否是多态的?如果有人详细描述了如何执行完整的语句,将会很有帮助.

另一种说法是

如果p为NULL也存在问题 - typeid将抛出std :: bad cast.

我看到的问题是取消引用,如果pNULL,而不是typeid(虽然它可能抛出bad_typeid,但这不是因为转换).dynamic_cast会返回一个NULL类型的指针void*,如果pNULL,而且typeid应该能够推断出类型的信息.这是一个错字,还是我错过了什么?

c++ dynamic-cast comma typeid

15
推荐指数
3
解决办法
681
查看次数

带有"空类"的C++多重继承内存布局

我知道多继承的内存布局没有定义,所以我不应该依赖它.但是,我可以在特殊情况下依赖它.也就是说,一个班级只有一个"真正的"超级班级.所有其他都是"空类",即既没有字段也没有虚拟方法的类(即它们只有非虚方法).在这种情况下,这些附加类不应该向类的内存布局添加任何内容.(更简洁地说,在C++ 11中,该类具有标准布局)

我可以推断出所有超类都没有偏移吗?例如:

#include <iostream>

class X{

    int a;
    int b;
};

class I{};

class J{};

class Y : public I, public X,  public J{};

int main(){

    Y* y = new Y();
    X* x = y;
    I* i = y;
    J* j = y;

    std::cout << sizeof(Y) << std::endl 
                  << y << std::endl 
                  << x << std::endl 
                  << i << std::endl 
                  << j << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这里,YX是唯一真正的基类.程序的输出(在linux上用g ++ 4.6编译时)如下:

8

0x233f010

0x233f010

0x233f010

0x233f010 …

c++ multiple-inheritance memory-alignment

8
推荐指数
1
解决办法
2508
查看次数

如何在Visual Studio 2010中修复错误MSB4018?

错误MSB4018:"VCMessage"任务意外失败.System.FormatException:索引(从零开始)必须大于或等于零且小于参数列表的大小.在System.Text.StringBuilder.AppendFormat(IFormatProvider提供程序,String格式,Object [] args)处于System.String.Format(IFormatProvider提供程序,String格式,Object [] args),位于Microsoft.Build.Shared.ResourceUtilities.FormatString(String在Microsoft.Build的Microsoft.Build.Utilities.TaskLoggingHelper.FormatResourceString(String resourceName,Object [] args)的Microsoft.Build.Utilities.TaskLoggingHelper.FormatString(String unformatted,Object [] args)中未格式化,Object [] args). Microsoft.Build上的Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()中的Microsoft.Build.CPPTasks.VCMessage.Execute()上的Utilities.TaskLoggingHelper.LogWarningWithCodeFromResources(String messageResourceName,Object [] messageArgs) .BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost,TaskLoggingContext taskLoggingContext,TaskHost taskHost,ItemBucket bucket,TaskExecutionMode howToExecuteTask,Boolean&taskResult)C:\ Program Files(x86 )\ MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets 990 6 vtk_minimal

visual-studio

8
推荐指数
1
解决办法
1万
查看次数

有没有办法检查XmlSchemaParticle是否为EmptyParticle?

我在这里遇到困难,是否有正确的方法来检查是否XmlSchemaParticle是一个EmptyParticle

XmlSchemaParticle.EmptyParticle似乎是一个私人的内部阶级XmlSchemaParticle.

我现在正在做的是particle.GetType().Name == "EmptyParticle",我发现它相当难看.

还有其他选择吗?

c# xml xsd

7
推荐指数
1
解决办法
912
查看次数

如何在模板化类型上专门化模板类的静态成员?

说我有以下课程:

template<class T>
struct A
{
    static int value;
};

template<class T>
int A<T>::value = 0;
Run Code Online (Sandbox Code Playgroud)

我可以专注A::value于一个没有问题的具体类型:

struct B
{
};

template<>
int A<B>::value = 1;
Run Code Online (Sandbox Code Playgroud)

我想在模板类型上专门化A ::值,我尝试了以下方法:

template<class T>
struct C
{
};

// error: template definition of non-template 'int A<C<T> >::value'
template<>
template<class T>
int A<C<T> >::value = 2;
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者只能在非模板类型上专门化A ::值?

c++

6
推荐指数
1
解决办法
1892
查看次数

如果我不关闭txt文件会发生什么

我即将为赛车编写程序,创建一个txt并不断添加新的线条.不幸的是我无法关闭文件,因为当汽车关闭覆盆子(程序正在运行)时也会关闭.所以我没有机会关闭txt.

这是一个问题吗?

python file-io raspberry-pi

6
推荐指数
1
解决办法
251
查看次数