小编Joe*_*oeG的帖子

为什么构造函数在C++中调用了两次?

在此代码中,构造函数被调用两次.

我该如何避免?

如果我取消注释默认构造函数代码块,那么代码不会给出令人满意的输出.

而且我也想要基于条件的模板实例化,所以我使用了void指针.

#include<iostream.h>
template<class Type>
class Data{
      public:
      Type val;
      Data(Type v){
                cout<<"In Constructor Param";
                val = v;
      }
      Data(){
             //  cout<<"In Constructor Defa";  uncommnet this line
      }
      ~Data(){}
};
int main(){
    Data<void *> obj;
    obj = new Data<float>(31.34f);
    cout<<*(float*)obj.val;
}
Run Code Online (Sandbox Code Playgroud)

输出:

In Constructor Param
In Constructor Param
31.34
Run Code Online (Sandbox Code Playgroud)

谢谢你的参与.

c++ templates

5
推荐指数
3
解决办法
2680
查看次数

存储字符串的数据结构?

我正在寻找一个存储字符串的数据结构.我需要一个接口中的函数,它接受一个字符串作为唯一参数,并返回一个引用/迭代器/指针/句柄,可用于检索其余字符串的字符串.数据结构的生命周期.不需要设置成员资格,条目删除等.

我更关心内存使用而不是速度.

string data-structures

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

编译.NET的C代码

如何编译用于.NET的C代码?

有一个用C语言写的游戏; 如何将其转换为.Net代码或使用它的某些部分?

.net c

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

通过迭代器更改类成员

我正在学习C++,无法理解这个问题:

我有一个简单的A类

class A {
private:
    int ival;
    float fval;

public:
    A(int i = 0, float f = 0.0) : ival(i), fval(f) { }
    ~A(){ }
    void show() const { 
        cout << ival << " : " << fval << "\n";
    }
    void setVal(int i) {
        ival = i;
    }

    //const getters for both ival and fval

    //used for the default "lesser"
    friend bool operator<(const A& val1, const A& val2) {
        return val1.ival < val2.ival ? true : false;;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl const

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

PRNG背后的理论是什么?

__forceinline static int Random()
{
    int x = 214013, y = 2531011;
    seed = (x * seed + y);
    return ((seed >> 16) & 0x7FFF) - 0x3FFF; 
}
Run Code Online (Sandbox Code Playgroud)

上面的代码返回PRNG,具有良好的均匀分布.

现在将x更改为x + 1 - 结果序列不能再被称为PRNG.

那么(这个)PRNG背后的理论是什么?"x和y是经过精心挑选的",但它们是如何被选中的?

c++ theory random

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

虚拟继承:Base Ctor没有调用Most Derived Class?

class Base
{
      public:
          Base(){}
          Base(int k):a(k) 
          {     
          }
            int a;
};

class X:virtual public Base
{
      public:
            X():Base(10){}
            int x;
};

class Y:virtual public Base
{
      public:
            Y():Base(10){}
            int y;
};

class Z:public X,public Y
{
public:
    Z():X(10){}
};

int main()
{
           Z a;
           cout << a.a;
           return 1;
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下,Z():X(10){} Base(int k):a(k)不打电话,但是当我改变Z():Base(10){}Base(int k):a(k)被调用.为什么?

谢谢.

c++ inheritance multiple-inheritance virtual-inheritance

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

VS 2010 C++ IntelliSense"这里可能没有指定存储类",即使它可以吗?

这是一个相当小的问题,但它让我烦恼:IntelliSense似乎确信在条件中声明函数范围内的静态变量if是一个错误,并抱怨它.只有它构建得很好,甚至MSDN文档都将其视为合法用法.我真的想摆脱波浪般的红线,因为它经常出现(它在我经常使用的宏中使用).

这是代码,作为一个例子,虽然它不是我的程序中唯一的例子:

MyForm::MyForm()
{
    _VMESSAGE("Constructing '%s'/%p:%p @ <%p>",GetEditorID(),GetFormType(),formID,this);
    if (static bool runonce = true)
    {
        // patch up vtbl    
        memaddr thisvtbl = (UInt32)memaddr::GetObjectVtbl(this);
        _MESSAGE("Patching MyForm Form vtbl @ <%p>",thisvtbl);
        gLog.Indent();
        for (int i = 0; i < sizeof(Form_NoUseMethods)*0x8; i++)
        {
            if ((Form_NoUseMethods[i/0x20] >> (i%0x20)) & 1)
            {
                thisvtbl.SetVtblEntry(i*4,TESForm_vtbl.GetVtblEntry(i*4));
                _VMESSAGE("Patched Offset 0x%04X",i*4);
            }
        }
        gLog.Outdent();

        runonce  =  false;
    }
}
Run Code Online (Sandbox Code Playgroud)

无论是staticif ( static bool runonce = true )线路和的每次使用_MESSAGE_VMESSAGE(它使用了类似的构建体)是由智能感知下划线,和鼠标悬停在任何读取"错误:存储类可能不会在这里指定" 构建项目不会产生与这些线路相关的错误.

c++ intellisense static visual-studio-2010

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

使用数组的一部分初始化向量?

int arr[5] = {0,1,2,3,4};
vector<int> vec;
Run Code Online (Sandbox Code Playgroud)

通常我们这样做:

vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
Run Code Online (Sandbox Code Playgroud)

但是如何仅使用arr的前3个值初始化矢量vec?另外我如何用中间3值初始化它?

我必须马上初始化它,不要push_back多行...

c++ vector

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

使用十进制数转换

可能它是C程序员最简单的事情之一,但我真的无法得到它.

unsigned char Value[4]; 
unsigned long ulVer = 00010001;
unsigned long uSize = sizeof(ulVer);
memcpy(Value, &ulVer, uSize);
memcpy(&ulVer, Value, uSize); 
printf("%d",ulVer); 
Run Code Online (Sandbox Code Playgroud)

为什么ulVer是4097而不是10001?

c

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

C++ stringstream连接查询

该代码应该与.txt和_r.txt连接argv [1].

std::stringstream sstm;
std::stringstream sstm_r;

sstm<<argv[1]<<".txt";
sstm_r<<argv[1]<<"_r.txt";

const char* result = sstm.str().c_str();
const char* result_r = sstm_r.str().c_str();

fs.open(result);
fs_r.open(result_r);

cout<<result<<endl;
cout<<result_r<<endl;
Run Code Online (Sandbox Code Playgroud)

但它的作用是,当我输入"abc"作为argv [1]时,它给了我,结果为"abc_r.tx0",result_r也是"abc_r.tx0".这是怎样的正确方法,为什么是这个错了.

c++ string

2
推荐指数
1
解决办法
977
查看次数