所以,我有以下内容:
std::vector< std::vector <int> > fog;
Run Code Online (Sandbox Code Playgroud)
我非常天真地初始化它:
for(int i=0; i<A_NUMBER; i++)
{
std::vector <int> fogRow;
for(int j=0; j<OTHER_NUMBER; j++)
{
fogRow.push_back( 0 );
}
fog.push_back(fogRow);
}
Run Code Online (Sandbox Code Playgroud)
感觉非常错误......有没有另一种方法来初始化这样的矢量?
浏览gcc编译器源代码(gcc/c-family/c-pragma.c)时,我看到:
typedef struct GTY(()) align_stack {
int alignment;
tree id;
struct align_stack * prev;
} align_stack;
Run Code Online (Sandbox Code Playgroud)
而且无论我有多少C编程年,我(())都知道这些:我还完全不知道.有人可以解释一下他们的意思吗?谷歌似乎没有找到它.
我很好奇为什么下面的代码:
#include <string>
int main()
{
std::string a = "ABCDEFGHIJKLMNO";
}
Run Code Online (Sandbox Code Playgroud)
当使用编译时,将-O3产生以下代码:
main: # @main
xor eax, eax
ret
Run Code Online (Sandbox Code Playgroud)
(我完全理解不需要多余的,a因此编译器可以从生成的代码中完全忽略它)
但是以下程序:
#include <string>
int main()
{
std::string a = "ABCDEFGHIJKLMNOP"; // <-- !!! One Extra P
}
Run Code Online (Sandbox Code Playgroud)
产量:
main: # @main
push rbx
sub rsp, 48
lea rbx, [rsp + 32]
mov qword ptr [rsp + 16], rbx
mov qword ptr [rsp + 8], 16
lea rdi, [rsp + 16]
lea rsi, [rsp + 8]
xor …Run Code Online (Sandbox Code Playgroud) 在我的CMake脚本中,我想看看我的系统上是否有文件,如果有文件,请使用默认文件.这是代码:
find_file(
${project_name}_${customer}_config
${ROOT}/configuration/${customer}/configuration.${project_name}.xml
)
if(NOT ${${project_name}_${customer}_config} STREQUAL
${project_name}_${customer}_config-NOTFOUND )
configure_file(${ROOT}/configuration/${customer}/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
else()
configure_file(${FAPP_ROOT}/configuration/Default/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
endif()
Run Code Online (Sandbox Code Playgroud)
但似乎这不起作用.
检查CMake中是否存在文件的正确方法是什么?
我想知道是否有std::cout自动在打印序列之间插入一些预定义值的方法.
例如:
std::cout << 2 << 3 << 33 << 45 << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出
233345
Run Code Online (Sandbox Code Playgroud)
我希望它输出
2 3 33 45
Run Code Online (Sandbox Code Playgroud)
我知道,这很容易:
std::cout << 2 << " " << 3 << " " << 33 << " " << 45 << std::endl;
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有办法实现自动化,例如:
std::cout << set_some_separator(" ") << 2 << 3 << 33 << 45 << std::endl;
Run Code Online (Sandbox Code Playgroud)
任何人都知道这样的事情可能吗?
C++ getter方法的最佳实践是什么,它应该返回一个非平凡类型,但是类型为class或struct的成员.
MyType MyClass::getMyType() { return mMyType; } const MyType& MyClass::getMyType() { return mMyType; } MyType* MyClass::getMyType() { return &mMyType; } 哪里
class MyType { /* ... */ };
class MyClass
{
private:
MyType mMyType;
}
Run Code Online (Sandbox Code Playgroud)
我特别担心这种方法的以下用法.你能否详细说明这可能会如何影响复制对象,以及悬挂引用和疯狂指针的危险,如果function()想保存它以供进一步使用.
MyType* savedPointer;
SomeType function(MyType* pointer) { savedPointer = pointer; };
Run Code Online (Sandbox Code Playgroud)
一个.有效期为1和2.
{
MyType t = myClass.getMyType();
function(&t);
}
// is savedPointer still valid here?
Run Code Online (Sandbox Code Playgroud)
湾 有效期为1和2.
{
const MyType& t = myClass.getMyType();
function(&t);
}
// is savedPointer still …Run Code Online (Sandbox Code Playgroud) 我想传入一个硬编码的char数组作为sourcememcpy 的参数...像这样:
memcpy(dest, {0xE3,0x83,0xA2,0xA4,0xCB} ,5);
Run Code Online (Sandbox Code Playgroud)
使用clang编译时会出现以下错误:
cccc.c:28:14: error: expected expression
Run Code Online (Sandbox Code Playgroud)
如果我修改它(参见额外的括号):
memcpy(dest,({0xAB,0x13,0xF9,0x93,0xB5}),5);
Run Code Online (Sandbox Code Playgroud)
clang给出的错误是:
cccc.c:26:14: warning: incompatible integer to pointer
conversion passing 'int' to parameter of
type 'const void *' [-Wint-conversion]
cccc.c:28:40: error: expected ';' after expression
memcpy(c+110,({0xAB,0x13,0xF9,0x93,0xB5}),5);
Run Code Online (Sandbox Code Playgroud)
那么,问题是:
如何传入硬编码数组作为memcpy(http://www.cplusplus.com/reference/cstring/memcpy/)的源参数
我试过了:
(void*)(&{0xAB,0x13,0xF9,0x93,0xB5}[0]) - syntax error
{0xAB,0x13,0xF9,0x93,0xB5} - syntax error
({0xAB,0x13,0xF9,0x93,0xB5}) - see above
(char[])({0xE3,0x83,0xA2,0xA4,0xCB}) - error: cast to incomplete type 'char []' (clang)
Run Code Online (Sandbox Code Playgroud)
和一些更疯狂的组合我很惭愧写在这里......
请记住:我不希望创建一个新的变量来保存阵列.
我非常感谢以下问题的一些帮助:
我有一个带摄像头的小工具,生成H264压缩视频帧,这些帧正在发送到我的应用程序.这些框架不在容器中,只是原始数据.
我想使用ffmpeg和libav函数来创建一个视频文件,以后可以使用.
如果我解码帧,然后编码它们,一切正常,我得到一个有效的视频文件.(解码/编码步骤是通常的libav命令,这里没什么花哨的,我把它们从万能的互联网上取下来,它们坚如磐石)......但是,我通过解码和编码浪费了大量时间,所以我想跳过此步骤并直接将帧放在输出流中.现在,问题来了.
这是我提出的用于生成编码的代码:
AVFrame* picture;
avpicture_fill((AVPicture*) picture, (uint8_t*)frameData,
codecContext->pix_fmt, codecContext->width,
codecContext->height);
int outSize = avcodec_encode_video(codecContext, videoOutBuf,
sizeof(videoOutBuf), picture);
if (outSize > 0)
{
AVPacket packet;
av_init_packet(&packet);
packet.pts = av_rescale_q(codecContext->coded_frame->pts,
codecContext->time_base, videoStream->time_base);
if (codecContext->coded_frame->key_frame)
{
packet.flags |= PKT_FLAG_KEY;
}
packet.stream_index = videoStream->index;
packet.data = videoOutBuf;
packet.size = outSize;
av_interleaved_write_frame(context, &packet);
put_flush_packet(context->pb);
}
Run Code Online (Sandbox Code Playgroud)
变量的位置如下:
frameData是来自摄像机的解码帧数据,它是在前一步骤中解码的,videoOutBuf是用于保存数据的普通uint8_t缓冲区
我修改了应用程序以便不解码帧,而只是简单地传递数据:
AVPacket packet;
av_init_packet(&packet);
packet.stream_index = videoStream->index;
packet.data = (uint8_t*)frameData;
packet.size = currentFrameSize;
av_interleaved_write_frame(context, &packet);
put_flush_packet(context->pb);
Run Code Online (Sandbox Code Playgroud)
哪里
frameData是原始的H264帧,currentFrameSize是原始H264帧的大小,即.我从每个框架的小工具中获得的字节数.
然后,应用程序突然无法正常工作,生成的视频无法播放.这很明显,因为我没有为数据包设置正确的PTS.我做的是以下(我很绝望,你可以从这种方法看到:)) …
我试图在postgres中创建一个表,但它最终在错误的数据库中.
这是我的工作:在我的sql脚本中,我最初创建了一个用户和一个数据库,然后是一个表.代码将解释更多:
drop database if exists sinfonifry;
drop role if exists sinfonifry;
-- create the requested sinfonifry user
create user sinfonifry createdb createuser password 'some_password';
-- create a sinfonifry database
create database sinfonifry owner sinfonifry;
DROP TABLE if exists sinf01_host;
CREATE TABLE sinf01_host
(
host_id bigserial NOT NULL, -- The primary key
host_ip inet NOT NULL, -- The IP of the host
host_name character varying(255) NOT NULL, -- The name of the host
CONSTRAINT "PK_host" PRIMARY KEY (host_id )
) …Run Code Online (Sandbox Code Playgroud) 我刚收到一条评论,比如说
问题是手动内存管理.
delete在用户代码中没有位置,从C++ 14开始,也没有new
有人可以解释一下为什么吗?
c++ ×6
c ×3
arrays ×1
c++14 ×1
clang ×1
cmake ×1
compilation ×1
create-table ×1
file ×1
file-exists ×1
gcc ×1
getter ×1
h.264 ×1
hardcoded ×1
libavcodec ×1
libavformat ×1
postgresql ×1
vector ×1