小编bob*_*obo的帖子

这个数组如何合法?

CoreAudioTypes.h中,有以下声明:

struct AudioBuffer
{
    UInt32  mNumberChannels;
    UInt32  mDataByteSize;
    void*   mData;
};
typedef struct AudioBuffer  AudioBuffer;

/*!
    @struct         AudioBufferList
    @abstract       A variable length array of AudioBuffer structures.
    @field          mNumberBuffers
                        The number of AudioBuffers in the mBuffers array.
    @field          mBuffers
                        A variable length array of AudioBuffers.
*/
struct AudioBufferList
{
    UInt32      mNumberBuffers;
    AudioBuffer mBuffers[1]; // this is a variable length array of mNumberBuffers elements
} ;
typedef struct AudioBufferList  AudioBufferList;
Run Code Online (Sandbox Code Playgroud)

我的问题涉及到mBuffers成员AudioBufferList.它们将它声明为一个大小为1的数组,但它的使用方式就好像是(任何大小)一样mNumberBuffers.

在C和C++中这不是非法的(代码应该兼容)吗?

这段代码:

int …
Run Code Online (Sandbox Code Playgroud)

c c++ arrays

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

为什么 `std::make_tuple` 需要移动语义?

std::tuple我认为通过std::make_tuplerequire 右值引用参数( type )创建一个非常有意识的设计决策T&&

然而,这意味着对象类型的移动语义 ( std::move 只不过是 to 的强制转换T&&,而且我对构建始终需要这样做的对象感到不太舒服std::tuple

int x = 7, y = 5;
std::tuple<int, int> fraction = make_tuple<int, int>( x, y ); // fails
Run Code Online (Sandbox Code Playgroud)

关于上述内容,编译器说:

错误 C2664: 'std::tuple<int,int> std::make_tuple<int,int>(int &&,int &&)': 无法将参数 1 从 'int' 转换为 'int &&'

message : 您无法将左值绑定到右值引用

std::tuple如果您不使用,则可以从左值制作 a没有问题make_tuple

std::tuple<int, int> fraction = { x, y }; // ok
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是为什么?

c++ stdtuple

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

MSVC++ rand()和C#System.Random之间的关系

我怎样才能使MSVC++程序和C#.NET程序产生相同的随机数序列?

可能吗?MSVC++ rand()System.Random?之间有什么关系吗?

鉴于下面的例子,它们似乎完全不同.

#include <iostream>
using namespace std;

int main()
{
  srand( 1 ) ;

  cout << rand() << endl <<
    rand() << endl <<
    rand() << endl ;
}
Run Code Online (Sandbox Code Playgroud)
using System;

class Program
{
  static void Main( string[] args )
  {
    Random random = new Random( 1 );

    Console.WriteLine( random.Next() );
    Console.WriteLine( random.Next() );
    Console.WriteLine( random.Next() );
  }
}
Run Code Online (Sandbox Code Playgroud)

c# c++ random

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

什么时候需要前方声明?

我正在研究这个C++项目.

所有类的实现都与.h文件分开.

但是,我不确定为什么/何时需要前方声明.

例如,当我#included"ClassType.h"时,我刚刚遇到错误,编译器完全拒绝编译具有指向ClassType的指针的类,即使类ClassType 在"ClassType.h"中明确定义.

为什么编译器不能简单地看到我已经#included"ClassType.h",为什么它需要一个前向声明呢?

#include "ClassType.h"

// REFUSES TO COMPILE WITHOUT forward declaration
class ClassType;

class SomeClass
{
    ClassType* instance;
};
Run Code Online (Sandbox Code Playgroud)

c++ forward-declaration

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

帮助在PHP中使用正则表达式替换

我在静态html文件中有一堆网址需要更改.

他们现在看起来像这样:

<img src="/foldera/folderb/folderc/images/imgxyz.jpg" />

他们需要看起来像这样:

<img src="imgxyz.jpg" />

所以,我刚写了一个php脚本,打开每个脚本并执行preg_replace().

我的正则表达式(使用双重反斜杠,是):


$regex = '/<img src="\\/foldera\\/folderb\\/folderc\\/images\\/([^"]*)" \\/>/'

$replacement = '<img src="$0" />' ;
Run Code Online (Sandbox Code Playgroud)

因此,我只会在/ images之前捕获任何内容,直到结束报价.

但我得到的是:

<img src="<img src="/foldera/folderb/folderc/images/imgxyz.jpg" />" />

似乎捕获组过于热心......或者某些东西与/ foldera/folderb部分不匹配.

这里发生了什么?

php regex

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

C:没有显式返回构造的结构,但它仍然有效

我编写了一个'构造函数'函数,它在C语言中创建一个Node,使用Visual Studio 2008,ANSI C模式编译.

#include <stdio.h>
#include <stdlib.h>

typedef struct _node
{
  struct _node* next ;
  char* data ;
} Node ;

Node * makeNode()
{
  Node * newNode = (Node*)malloc( sizeof(Node) ) ;

  // uncommenting this causes the program to fail.
  //puts( "I DIDN'T RETURN ANYTHING!!" ) ;
}

int main()
{
  Node * myNode = makeNode() ;
  myNode->data = "Hello there" ;

  // elaborate program, still works

  puts( myNode->data ) ;

  return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是:

  • *不从makeNode()返回值只是一个警告,
  • *更令人惊讶的是makeNode()_ …

c memory-management

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

UITextField在哪里设置clearsOnBeginEditing

我真的习惯于VS所有属性都在一个大对话框中很好地列出.

在Interface Builder中,我找不到这样的对话框.

如果我想将UITextField的clearsOnBeginEditing字段设置为FALSE,那么最好的位置在哪里?我刚刚缺少接口构建器中控件属性的接口吗?

iphone objective-c interface-builder

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

Mac开发中心的+是什么意思?

例如,NSString文档有

– initWithFormat:
– initWithFormat:arguments:
– initWithFormat:locale:
– initWithFormat:locale:arguments:
– initWithData:encoding:
+ stringWithFormat:
+ localizedStringWithFormat:
+ stringWithCharacters:length:
+ stringWithString:
+ stringWithCString:encoding:
+ stringWithUTF8String:
Run Code Online (Sandbox Code Playgroud)

那么当方法名称左边有+时,它意味着什么?

objective-c

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

是kEatSpeed还是kSpeedEat?

我有一堆不相同的相关常量.如何命名它们更好的方法是什么?

方式#1

kWalkSpeed
kRunSpeed
kEatSpeed
kDrinkSpeed

要么,

方式#2

kSpeedWalk
kSpeedRun
kSpeedEat
kSpeedDrink

如果我们根据这些评估这些

  • 可读性
  • 易懂
  • 成员列表中的组织(自动完成)
  • 由于使用错误的变量名称而不容易出现细微错误

我认为方式#1赢得了可读性,它们与可理解性相关,在自动完成列表中组织方式#2获胜,方式#1也因不容易出错而获胜.

我不确定它经常发生在其他人kSpeedEatingWhenInAHurry身上,但是当这样的变量名变长时,那么当你真正想要的时候很容易写kSpeedEatingWhenInHome,特别是当使用自动完成时.

任何观点?

language-agnostic variables naming

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

C++中用于对象构造的**习语

在很多C++ API(基于COM的那些)中为你创造了一些东西,指向构造对象的指针通常需要作为**指针(并且函数将为你构造和初始化)

您通常会看到以下签名:

HRESULT createAnObject( int howbig, Object **objectYouWantMeToInitialize ) ;
Run Code Online (Sandbox Code Playgroud)

- 但您很少看到新对象作为返回值传递.

除了想要查看错误代码的人,这是什么原因?是否更好地使用**模式而不是返回的指针来实现更简单的操作,例如:

wchar_t* getUnicode( const char* src ) ;
Run Code Online (Sandbox Code Playgroud)

或者这更好地写成:

void getUnicode( const char* src, wchar_t** dst ) ;
Run Code Online (Sandbox Code Playgroud)

我能想到的最重要的事情就是记住释放它,并且由于**某种原因,这种方式往往会提醒我,我也必须解除它.

c++ construction factory

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

任何人都可以解释"arc4random()"方法是如何工作的?

任何人都可以解释"arc4random()"方法如何在内部工作?

我的代码在这里:

randomDataName.derivation = [derivationArray objectAtIndex:(arc4random() %derivationCount)];
randomDataName.icon = [iconArray objectAtIndex:(arc4random() % iconCount)];
randomDataName.notes = [notesArray objectAtIndex:(arc4random() % notesCount)];
Run Code Online (Sandbox Code Playgroud)

objective-c

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

如何捕获Eigen的MatrixXd :: resize()函数引发的异常?

为什么我不能抓住这个例外?

我的(客户端)代码:

Eigen::MatrixXd FFs ;
try
{
  FFs.resize( NUMPATCHES, NUMPATCHES ) ;
}
catch( int e )
{
  error( "Not enough memory :(" ) ;
  return ;
}
Run Code Online (Sandbox Code Playgroud)

抛出异常的特征代码是向下几级.

    EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
    {
        internal::check_rows_cols_for_overflow(rows, cols);
        m_storage.resize(rows*cols, rows, cols);
    }

哪个电话

    void resize(DenseIndex size, DenseIndex rows, DenseIndex cols)
    {
      if(size != m_rows*m_cols)
      {
        internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols);
        if (size)
          m_data = internal::conditional_aligned_new_auto(size);
        else
          m_data = 0;
        EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
      }
      m_rows = rows;
      m_cols = cols;
    }

粗体线是在线前被击中的线:

throw std::bad_alloc();
Run Code Online (Sandbox Code Playgroud)

被击中,这发生在internal::conditional_aligned_delete_auto(m_data, …

c++ exception-handling eigen

-5
推荐指数
3
解决办法
2161
查看次数