小编Vin*_*ink的帖子

放置新的和删除

删除此处分配的所有内存的正确方法是什么?

  const char* charString = "Hello, World";
  void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
  Buffer* buf = new(mem) Buffer(strlen(charString));

  delete (char*)buf;
Run Code Online (Sandbox Code Playgroud)

要么

  const char* charString = "Hello, World";
  void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
  Buffer* buf = new(mem) Buffer(strlen(charString));

  delete buf;
Run Code Online (Sandbox Code Playgroud)

还是他们都一样?

c++ new-operator visual-c++ placement

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

从C++基类中的函数返回枚举

我遇到了以下代码,

class Handler
{
public:
   Handler() {}
   ~Handler() {}

    enum HANDLER_PRIORITY {PRIORITY_0, PRIORITY_1, PRIORITY_2};

    virtual HANDLER_PRIORITY GetPriority();
private:
    HANDLER_PRIORITY m_priority;
}
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中我有这个

HANDLER_PRIORITY Handler::GetPrioity()
{
   return PRIORITY_0;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个编译错误,"缺少类型说明符 - 假设int.注意:C++不支持default-int"

我知道unlinke C,C++不支持default-int return.但为什么它不会识别枚举返回类型.如果我使用int/void替换HANDLER_PRIORITY中的返回类型,或者如果我在类本身中定义方法,则它可以正常工作.(内联)或将返回类型更改为Handler :: HANDLER_PRIORITY.

我在VS 2008.

c++ enums visual-c++

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

返回类型的重载功能?(重新)

有人能告诉我两种情况下编译器的不同之处吗?

   #include <cstdio>
    using namespace std;

    template <typename TReturn, typename T>
    TReturn convert(T x)
    {
        return x;
    }

    int main()
    {

       printf("Convert : %d %c\n", convert<int, double>(19.23), convert<char, double>(100));   
       return 0;
    } 
Run Code Online (Sandbox Code Playgroud)

int convert(double x)
{
   return 100;
}

char convert(double x)
{
   return 'x';
}         

int main()
{ 
   printf("Convert : %d %c\n", convert(19.23), convert(100));     // this doesn't compile
   return 0;
} 
Run Code Online (Sandbox Code Playgroud)

第一种情况是否没有函数重载?

c++ compiler-construction templates

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