小编mav*_*rik的帖子

Bjarne对这个ADL的例子是错误的,还是我有编译器错误?

我正在阅读C++编程语言,第4版(由Bjarne Stroustrup撰写)关于.这是引用(26.3.6,Overaggressive ADL):

依赖于参数的查找(通常称为ADL)对于避免冗长非常有用(14.2.4).例如:

#include <iostream>

int main()
{
    std::cout << "Hello, world" << endl; // OK because of ADL
}
Run Code Online (Sandbox Code Playgroud)

如果没有依赖于参数的查找,则endl无法找到操纵器.实际上,编译器注意到第一个参数<<ostream定义的std.因此,寻找endlstd和发现它(中<iostream>).

这是编译器产生的结果(C++ 11模式):

prog.cpp: In function ‘int main()’:
prog.cpp:4:36: error: ‘endl’ was not declared in this scope
 std::cout << "Hello, world" << endl;
                                ^
Run Code Online (Sandbox Code Playgroud)

这是编译器或书中的错误.标准说什么?

更新:

我需要澄清一下.我知道正确的答案是使用std::endl.问题是关于书中的文字.正如Lachlan Easton所说,这不仅仅是一个错字.整段是(可能)错了.如果这本书是由另一位(鲜为人知的)作者写的,我可以接受这种错误,但我(并且仍然)怀疑,因为它是由Bjarne写的.

c++ argument-dependent-lookup c++11

80
推荐指数
5
解决办法
3382
查看次数

解释callgrind数据

我的应用需要动态调用图.我用callgrind工具(valgrind套件)运行它并得到callgrind.out.xxxxx文件.现在,我想对这些数据进行图形表示.KCacheGrind对我没什么帮助,因为它绘制了图形的有限部分(绘制~50个函数而不是〜1500个轮廓,我不知道如何修复它).如何获得将绘制所有函数的图形图像?

valgrind graphviz callgrind

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

从QGridLayout中删除小部件

我尝试从这样的指定行中删除小部件QGridLayout:

void delete_grid_row(QGridLayout *layout, int row)
{
    if (!layout || row < 0) return;

    for (int i = 0; i < layout->columnCount(); ++i) {
        QLayoutItem* item = layout->itemAtPosition(row, i);
        if (!item) continue;

        if (item->widget()) {
            layout->removeWidget(item->widget());
        } else {
            layout->removeItem(item);
        }
        delete item;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我调用它时,应用程序delete item在第一次迭代中与SIGSEGV崩溃.有任何想法吗?

c++ qt qgridlayout

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

如何使用Inno Setup注册.NET DLL

我使用Visual Studio 2010 C#编写了一个类库来读取计算机的硬件信息(例如HDD/SSD).我将使用此dll创建一个使用InnoSetup的安装程序来读取目标计算机的硬件信息.现在我的问题是.NET dll不能直接使用,除非它已经注册.我试图在InnoSetup的InitializeSetup中找到一种注册dll的方法,这样我就可以使用dll中的函数了.这是我为安装程序编写的脚本.

function InitializeSetup(): Boolean;
var
    obj: Variant;
    diskPartitions: Integer;
    va: String;
    ErrorCode: Integer;
    b: Boolean;
begin
    ExtractTemporaryFile('SSHardwareChecker.dll');
    RegisterServer(False, ExpandConstant('{tmp}\SSHardwareChecker.dll'), False);
    obj := CreateOleObject('SSHardwareChecker.SSClass');
    va := obj.GetDiskDriveInformation;
    MsgBox(va, mbInformation, mb_Ok);
    b:=UnregisterServer(False, ExpandConstant('{tmp}\SSHardwareChecker.dll'), False);
end;
Run Code Online (Sandbox Code Playgroud)

该功能RegisterServer似乎不起作用RegSvr32 failed with exit code 0x4.它会抛出一个错误.我在网上读了很多文章说.net dll应该用regasm注册.我真的不知道如何做到这一点,尤其是在Inno Setup中.

请帮帮我们

inno-setup

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

停止提交给ExecutorService的Runnable

我在我的Java应用程序中实现了订阅.添加新订户时,应用程序会创建新任务(实现Runnable在单独的线程中运行的类)并将其添加到以下内容中ExecutorService:

public void Subscribe()
{
    es_.execute(new Subscriber(this, queueName, handler));
}

//...

private ExecutorService es_;
Run Code Online (Sandbox Code Playgroud)

应用程序可以根据需要注册多个订阅者.现在我希望实现类似的东西Unsubscribe,每个订阅者都有能力停止消息流.在这里,我需要一种方法来阻止其中一个任务运行ExecutorService.但我不知道怎么做到这一点.

ExecutorService.shutdown()和它的变化不适合我:它们终止所有任务,我想终止它们中的一个.我正在寻找解决方案.尽可能简单.谢谢.

java executorservice

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

java:maps zoo,选择什么

我是Java World的新手(因为我在C/C++中编写初级).我在我的应用中使用地图.由于java.util.Map是抽象的,我需要实例化它的实现.通常我用的HashMap是:

Map<String, MyClass> x = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

但在Java文档,我发现许多其他的实现,如TreeMap,LinkedHashMap,HashTable,等我想知道我是否可以继续使用盲目的HashMap或有任何重要的差异Map实现.

要点的简要列表就可以了.谢谢.

java hashtable hashmap map linkedhashmap

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

使用std :: shared_ptr <std :: vector>而不是boost :: shared_array是否有意义?

现在我正在重写我的代码的一部分以使用C++ 11标准.在某些地方我发现了以下代码:

boost::shared_array<uint8_t> array;
Run Code Online (Sandbox Code Playgroud)

它是否可以替换为:

std::shared_ptr<std::vector<uint8_t>> array;
Run Code Online (Sandbox Code Playgroud)

我正在尝试替换我的代码中已经在C++ 11中提供的所有boost功能.

我需要澄清一下.实际上我需要一个原始数组(但使用refcount,因此可以自动删除),不需要所有这些矢量功能.因此boost :: shared_array解决了我想要的问题而无需任何额外费用.但是我正在努力让我的代码尽可能地使用新标准(虽然许多来自boost的库仍未被新标准所涵盖).

谢谢.

c++ boost stl c++11

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

将秒数转换为时间

有没有办法将3056144 sec格式转换为秒数(例如,这是时间增量而不是时间)到时间YYYY-mm-dd HH:MM:SS

我试图将秒数转换为struct tm使用localtime然后减去UNIX开始时间(1970-01-01),但这不能按预期工作.

提前致谢.

PS我必须使用C++ 03,而不是C++ 11.

c++ time datetime

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

Vim:替换函数体内的文本

我有一些非常有用的插件可以通过文件查找和替换文本(请参阅EasyGrepvim脚本 - 这对程序员非常有帮助).我甚至可以只在当前缓冲区中替换文本 - 使用插件或:%s ....但是如果我只想在当前函数体中替换文本呢?

请考虑以下示例:

void f0()
{
     int foo = 0;
     // ...
}

// 99 other functions that uses foo as local variable.

void f100()
{
     int foo = 0;  // I want to replace foo with bar only in this function
     // 1000 lines of code that uses foo goes below
     // ...
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用:%s ...具有c标志进行确认,但我相信有一个更快的方法来做到这一点.

谢谢.

vim replace

5
推荐指数
2
解决办法
3774
查看次数

QToolButton:更改菜单位置

使用菜单时,QToolButton菜单显示在按钮正下方。有没有办法在按钮的左侧/右侧显示菜单?

qt

5
推荐指数
2
解决办法
1582
查看次数