小编Pie*_*tro的帖子

对象容器的性能与指针容器的性能

class C { ... };
std::vector<C> vc;
std::vector<C*> pvc;
std::vector<std::unique_ptr<C>> upvc;
Run Code Online (Sandbox Code Playgroud)

根据C的大小,按值存储的方法或通过指针存储的方法将更有效.

是否有可能大致知道这个大小是什么(在32位和64位平台上)?

c++ optimization containers pointers c++11

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

我可以确定向量包含对象而不是指向对象的指针吗?

我能否确定一个std::vector(或者一般来说,任何标准容器)包含对象而不是指向对象的指针,无论对象的类有多复杂,如果它具有恒定的大小?

例如:在这个简单的情况下:

struct MyStruct { int a, b; };
std::vector<MyStruct> vs;
Run Code Online (Sandbox Code Playgroud)

结果向量布局是:

[ ..., a1, b1, a2, b2, a3, b3, ... ]
Run Code Online (Sandbox Code Playgroud)

标准是否保证在这种(或更复杂的)情况下会发生同样的情况,其中结构的大小应该是恒定的:

struct MyStruct2 { float f[10]; };
std::vector<MyStruct2> vs2;
Run Code Online (Sandbox Code Playgroud)

带布局:

[ ..., f1[0], f1[1], ..., f1[9], f2[0], f2[1], ..., f2[9], ... ]
Run Code Online (Sandbox Code Playgroud)

代替:

[ ..., *pf1, *pf2, ... ]
pf1 = [ f1[0], f1[1], ..., f1[9] ]
pf2 = [ f2[0], f2[1], ..., f2[9] ]
Run Code Online (Sandbox Code Playgroud)

c++ containers pointers stdvector

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

使用boost named_semaphore的代码中的错误

我会在共享内存中保留一些数据,使用命名信号量来管理访问:

#include <boost/interprocess/sync/named_semaphore.hpp>

struct shared_memory_buffer
{
    // Application data
    int  items[10];

    // Synchronization data
    boost::interprocess::named_semaphore  syncSem;

    shared_memory_buffer()
    : syncSem(boost::interprocess::open_or_create_t, "testSemaphore", 0)   // error
    {}
};
Run Code Online (Sandbox Code Playgroud)

但是,我在指定的行得到以下编译时错误:

error: expected primary-expression before ‘,’ token
Run Code Online (Sandbox Code Playgroud)

这是我的系统:

MacOS X 10.6

i686-apple-darwin10-g ++ - 4.2.1(GCC)4.2.1(Apple Inc. build 5664)

提升1.44

谢谢!

c++ boost semaphore interprocess

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

QComboBox持续存储重复的条目

QComboBox保持存储用户输入的重复字符串,即使我调用其成员函数QComboBox::setDuplicatesEnabled(false).

即使用户插入重复项,如何存储字符串的单个副本?

Qt文档:

duplicatesEnabled : bool
此属性保存用户是否可以在组合框中输入重复项.
请注意,始终可以以编程方式将重复项插入组合框中.
默认情况下,此属性为false(不允许重复).
访问功能:
bool duplicatesEnabled () const
void setDuplicatesEnabled ( bool enable )

qt mingw duplicates duplicate-removal qcombobox

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

我的程序在进入main()函数之前退出

程序在进入main()函数之前崩溃/退出的原因是什么?

我正在开发一个正常运行的项目.我添加了一些使用boost线程的代码,我更新了makefile(CMakeLists.txt),一切都编译和链接没有问题.

当我启动可执行文件时,我得到的只是提示.

为了检查程序是否开始执行某些操作,我添加了一个cerr << "TEST" << endl作为第一条指令main(),并且没有打印任何内容.

当然,当我尝试打印该字符串时,尚未创建任何线程.

在main()的开头设置一个断点是没用的.

系统:
Windows 7,MinGW,GCC,cmake

c++ crash program-entry-point

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

boost :: circular_buffer等效于文件?

我正在寻找一个允许在磁盘上获得循环缓冲区的库.
在Boost中有类似的东西,但它是一个基于内存的容器:circular_buffer.

c++ boost disk circular-buffer

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

如何让老Git分支到GitHub?

我将我的git修改项目上传到GitHub.从那里我可以看到我之前的所有提交,但不是旧的分支.

我还应该推送我的本地.git目录吗?

git branch github version-tree

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

在特定时间范围内 git/GitHub 上的提交总数?

如何通过 GitHub Web 界面知道对项目完成的提交总数?如何获得特定时间范围内的提交总数?

我现在能得到的是每个开发人员完成的提交数量,而不是总数。

示例:https : //github.com/BVLC/caffe

git commit github git-commit

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

C++,用多行代码注释

不应该代码:

int Func(int a, // comment
         int b, // comment
         int c  // comment
        ) ...
Run Code Online (Sandbox Code Playgroud)

相当于:

int Func(int a, // comment int b, // comment int c  // comment) ...
Run Code Online (Sandbox Code Playgroud)

为什么它正确构建(至少使用G ++)?

到目前为止,我总是/* */在这种情况下使用评论.

c++ gcc comments clang

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

std :: make_unique与空指针?

我没有找到有关如果将null指针传递给会发生什么的任何文档std::make_unique

是否抛出异常?

c++ unique-ptr c++14

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

带有单个模板参数的 `std::variant` 的目的是什么?

在此页面上的示例中:https : //en.cppreference.com/w/cpp/utility/variant有一个std::variant带有单个模板参数:

std::variant<std::string> x("abc");
Run Code Online (Sandbox Code Playgroud)

由于变体允许存储可以属于一组不同类的对象,那么前一行的目的是什么?它不应该与:

std::string x("abc");
Run Code Online (Sandbox Code Playgroud)

c++ variant c++17

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

增强CRC问题:使用相同参数的不同结果

我第一次使用CRC(boost::crc_32_type),我注意到process_bytes()使用相同的参数调用方法两次我得到不同的结果.这是正常的吗?

#include <boost/crc.hpp>
#include <ios>              // for std::ios_base, etc.
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string              data1, data2;
    boost::crc_32_type  result1, result2;

    data1 = "This is a test string";
    data2 = data1;

    result1.process_bytes(data1.c_str(), data1.length());

    cout << "result1: " << hex << uppercase << result1.checksum() << endl;

    result1.process_bytes(data1.c_str(), data1.length());

    cout << "result1: " << hex << uppercase << result1.checksum() << endl;

    result2.process_bytes(data1.c_str(), data1.length());

    cout << "result2: " << hex << uppercase << result2.checksum() << …
Run Code Online (Sandbox Code Playgroud)

c++ boost crc

0
推荐指数
2
解决办法
2129
查看次数

因存在缺失标头而导致介子构建错误

从这个简单的 Meson 构建文件中,我在 *** 行收到一个关于缺少头文件的错误:

# meson.build - src/

subdir('config')
subdir('testers')
subdir('utilities')

headers += [
]

mainPrj += [
    'entrypoint.cpp'
    ]

autoTest += [
    'entrypoint_test.cpp'
]

Source = [ headers, mainPrj ]
SourceTest = [ headers, autoTest ]

MyProgExe = executable('MyProg', Source)     ***
MyProgTestExe = executable('MyProgTest', SourceTest)

test('Internal test', MyProgTestExe)
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

src/meson.build:***:0: 错误: 文件 dataStructures.hpp 不存在。

标头确实存在,它位于目录中src/config/,并且没有出现在src/meson.build文件中,而是出现在src/config/meson.build

# meson.build - src/config/

headers += [
    'dataStructures.hpp',
    'interface.hpp'
]
Run Code Online (Sandbox Code Playgroud)

如果我交换dataStructures.hppinterface.hpp,我会收到错误interface.hpp。 …

c++ meson-build

0
推荐指数
1
解决办法
1486
查看次数