小编Ben*_*igt的帖子

C++ - 重载operator new并提供其他参数

我知道你可以超载操作员new.执行此操作时,size_t默认情况下会为方法发送一个参数.但是,是否可以将size_t参数 - 以及其他用户提供的参数 - 发送到重载的new运算符方法?

例如

int a = 5;
Monkey* monk = new Monkey(a);
Run Code Online (Sandbox Code Playgroud)

因为我想覆盖这样的新运算符

void* Monkey::operator new(size_t size, int a)
{

...

}
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑:这是我想要完成的事情:

我在应用程序的开头(内存池)分配了一大块虚拟内存.继承我的基类的所有对象都将继承其重载的new运算符.我想有时在重载new中传递一个参数的原因是告诉我的内存管理器我是否要使用内存池,或者我是否想用malloc分配它.

c++ memory-management operator-overloading placement-new

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

可交换的oprator重载+ 2个不同的对象

我有2个表示矩阵的类:
1.RegularMatrix - O(n ^ 2)表示
2. SparseMatrix - 表示为链表(没有零)的矩阵.

让我说我有:

RegularMatrix a;
SparseMatrix b;
Run Code Online (Sandbox Code Playgroud)

我希望能够做到:

a+b;
Run Code Online (Sandbox Code Playgroud)

并且:

b+a;
Run Code Online (Sandbox Code Playgroud)

所以我正在重载+运算符.我的问题是,因为我希望加法是可交换的(a + b = b + a),我是否需要实现2个过载,每种情况一个?

RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
Run Code Online (Sandbox Code Playgroud)

或者是否有编译器自己决定的一般形式?

谢谢

c++ operator-overloading operator-keyword commutativity

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

检查数组是否包含false?

如何检查true_or_false 包含false值的数组?

bool[] true_or_false = new bool[10];

for (int i = 0; i < txtbox_and_message.Length; i++)
{
  bool bStatus = true;
  if (txtbox_and_message[i] == "")
  {
    bStatus = false;
  }
  true_or_false[i] = bStatus;                           
}
Run Code Online (Sandbox Code Playgroud)

.net c# arrays contains .net-2.0

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

Matlab,如何通过条件过滤数字向量?

在Matlab中,我有一个包含N个实数值的向量X:

  • 0.001
  • 0.003
  • 0.006
  • 0.009
  • 0.007
  • 0.006

我想创建一个新的向量Xb,它包含X的所有M值,小于0.005(M <= N).我怎么能这样做?

我尝试过:

Xb = X <0.005

但它给了我一个N值为0或1的向量.

感谢名单

matlab vector less

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

将STDIN与AllocConsole()一起使用

我有一个第三方dll,我加载到不是我的软件,我正在使用AllocConsole()创建标准的Windows CLI窗口,所以我有一个简单的方法输出调试消息.

我的问题是,它忽略了任何类型的输入.我只是希望能够使用我分配的控制台,并使我能够给它一些输入.

c++ winapi windows-console

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

如果使用cout.rdbuf()来切换缓冲区并且从不将其设置回来,会出现什么问题?

作者在标题下提出了这段代码A bus error on my platform

#include <fstream>
#include <iostream>

int main()
{
    std::ofstream log("oops.log");
    std::cout.rdbuf(log.rdbuf());
    std::cout << "Oops!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

字符串"Oops!\n"将打印到文件"oops.log".代码不会恢复cout的streambuf,但VS2010没有报告运行时错误.

c++ fstream streambuf undefined-behavior

6
推荐指数
2
解决办法
962
查看次数

N3600中的`latch`样本中是否存在竞争条件?

建议包含在C++ 14(又名C++ 1y)中的是一些新的线程同步原语:锁存器和屏障.提案是

这听起来是个好主意,样本使它看起来非常适合程序员.不幸的是,我认为示例代码调用了未定义的行为.提案说latch::~latch():

摧毁闩锁.如果在其他线程处于wait()或正在调用时销毁锁存器count_down(),则行为未定义.

请注意,它表示"in wait()"而不是"block in wait()",作为使用说明count_down().

然后提供以下示例:

第二用例的示例如下所示.我们需要加载数据然后使用许多线程处理它.加载数据是I/O绑定的,而启动线程和创建数据结构是CPU绑定的.通过并行运行这些,可以提高吞吐量.

void DoWork()
{
    latch start_latch(1);
    vector<thread*> workers;
    for (int i = 0; i < NTHREADS; ++i) {
      workers.push_back(new thread([&] {
        // Initialize data structures. This is CPU bound.
        ...
        start_latch.wait();
        // perform work
        ...
      }));
    }
    // Load input data. This is I/O bound.
    ...
    // Threads can now start processing
    start_latch.count_down();
}
Run Code Online (Sandbox Code Playgroud)

线程唤醒和返回之间是否存在竞争条件wait(),并且当闩锁离开范围时是否会破坏闩锁?除此之外,所有thread …

c++ race-condition language-lawyer c++14

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

C/C++:按ENTER键后,我可以将光标保持在当前行吗?

我想问一下按ENTER后是否有任何方法可以将光标保持在当前行!

例如 ...

#include<stdio.h>
int main()
{
    int d=0;
    printf("Enter a number : ");
    scanf("%d",&d);

    if(d%2)printf(" is a Odd number\n");
    else printf(" is a Even number\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出的一个例子:

Enter a number : 10
 is a Even number
Run Code Online (Sandbox Code Playgroud)

......但我需要的是这样的:

Enter a number : 10 is a Even number 
Run Code Online (Sandbox Code Playgroud)

我想在用户输入的数字旁边加上"是偶数"(或"是奇数")

c c++ terminal

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

这个指针是如何被捕获的?

请考虑以下代码:

struct S
{
  int x;
  void f()
  {
    auto l = [&](){ x = 42; }; //this is implicitly captured here
  }
};
Run Code Online (Sandbox Code Playgroud)

§5.1.2/ 14指出:

如果隐式捕获实体并且捕获默认值为=,或者使用不包含&的捕获显式捕获实体,则通过副本捕获实体.

因此,我得出结论,这this不是由副本捕获的.但是后来§5.1.2/ 15:

如果实体是隐式或显式捕获但未通过复制捕获,则通过引用捕获实体.未指定是否在闭包类型中为通过引用捕获的实体声明了其他未命名的非静态数据成员.

this通过参考捕获.但现在§5.1.2/ 17指出:

[...]如果this被捕获,则每个odr-use this转换为对闭包类型的相应未命名数据成员的访问,[...]

据我所知,这意味着闭包类型中必须有一个与this指针对应的未命名数据成员.但由于this通过引用捕获的,因此标准不要求存在这样的成员.我有什么问题?

c++ lambda this c++11

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

可以在没有Visual Studio的情况下安装Roslyn吗?

Roslyn最终用户预览是VSIX(Visual Studio扩展),但它取代了系统.NET Framework安装中的编译器,因此从命令行涉及csc.exe将开始使用Roslyn.

是否可以在未安装Visual Studio的计算机上安装Roslyn csc.exe?怎么样?

(是的,Roslyn与Visual Studio 2013 Express配合使用,因此许可不是问题.但是磁盘空间是IS.与SharpDevelop相比,甚至Express版本的占用空间也非常大.)

.net roslyn

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