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位平台上)?
我能否确定一个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) 我会在共享内存中保留一些数据,使用命名信号量来管理访问:
#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
谢谢!
QComboBox保持存储用户输入的重复字符串,即使我调用其成员函数QComboBox::setDuplicatesEnabled(false).
即使用户插入重复项,如何存储字符串的单个副本?
从Qt文档:
duplicatesEnabled : bool
此属性保存用户是否可以在组合框中输入重复项.
请注意,始终可以以编程方式将重复项插入组合框中.
默认情况下,此属性为false(不允许重复).
访问功能:
bool duplicatesEnabled () const
void setDuplicatesEnabled ( bool enable )
程序在进入main()函数之前崩溃/退出的原因是什么?
我正在开发一个正常运行的项目.我添加了一些使用boost线程的代码,我更新了makefile(CMakeLists.txt),一切都编译和链接没有问题.
当我启动可执行文件时,我得到的只是提示.
为了检查程序是否开始执行某些操作,我添加了一个cerr << "TEST" << endl作为第一条指令main(),并且没有打印任何内容.
当然,当我尝试打印该字符串时,尚未创建任何线程.
在main()的开头设置一个断点是没用的.
系统:
Windows 7,MinGW,GCC,cmake
我正在寻找一个允许在磁盘上获得循环缓冲区的库.
在Boost中有类似的东西,但它是一个基于内存的容器:circular_buffer.
我将我的git修改项目上传到GitHub.从那里我可以看到我之前的所有提交,但不是旧的分支.
我还应该推送我的本地.git目录吗?
如何通过 GitHub Web 界面知道对项目完成的提交总数?如何获得特定时间范围内的提交总数?
我现在能得到的是每个开发人员完成的提交数量,而不是总数。
不应该代码:
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 ++)?
到目前为止,我总是/* */在这种情况下使用评论.
我没有找到有关如果将null指针传递给会发生什么的任何文档std::make_unique。
是否抛出异常?
在此页面上的示例中: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) 我第一次使用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) 从这个简单的 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.hpp和interface.hpp,我会收到错误interface.hpp。 …
c++ ×10
boost ×3
containers ×2
git ×2
github ×2
pointers ×2
branch ×1
c++11 ×1
c++14 ×1
c++17 ×1
clang ×1
comments ×1
commit ×1
crash ×1
crc ×1
disk ×1
duplicates ×1
gcc ×1
git-commit ×1
interprocess ×1
meson-build ×1
mingw ×1
optimization ×1
qcombobox ×1
qt ×1
semaphore ×1
stdvector ×1
unique-ptr ×1
variant ×1
version-tree ×1