我有以下函数原型:
void PerformFusionCycle( StructType const* const a[],
StructType2 const* const b,
const float32 c,
StructType3 * const d,
StructType3 * const e)
我想用函数提供函数,但我不了解如何为第一个参数声明和赋值。如果我完全按照参数的要求声明一个变量,我就无法修改它的值,而不是一个可修改的左值"出现错误。如果我声明一个变量以便我可以修改它的值,那么我会在参数#1和#34;中生成不兼容的类型。编译器错误。我该怎么做?
谢谢!
答案 0 :(得分:2)
首先;该参数被读取为
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Chapter extends Model
{
protected $table = 'id','book_id','title','preface','number','createdAt','updatedAt','createdBy','updatedBy','deletedBy';
}
。
http://cdecl.org/是解析相当简洁的好地方 c / c ++声明语法。
以下方法可行:
array of const pointers to const StructType
答案 1 :(得分:2)
指针到指针的const-correctness一般来说非常混乱。但是,这个功能已经失控。它已经超越了const-correctness,这是一个很好的编程实践,很少或没有理由滥用const
关键字。
StructType const* const a[]
在这里,您可能只想确保该函数无法修改指向指针的数据。在函数原型中没有其他任何意义。数组语法也没有帮助,因为它无论如何都会被调整为指针。将所有内容替换为const StructType** a
。
const float32 c,
使值const
传递变量没有意义。无论如何,它是本地副本,所以谁关心它是否被功能修改?通常这只会让程序员感到困惑。根据我的经验,这样的代码通常是一个非常确定的迹象,表明原始程序员感到困惑。
同样StructType3 * const d
也没有意义。指针本身是按值传递的,谁关心函数是否修改了本地副本?
保持const-correctness的完整性的调用看起来像这样:
void PerformFusionCycle( const StructType** a,
const StructType2* b,
float32 c,
StructType3* d,
StructType3* e)
答案 2 :(得分:1)
该函数的第一个参数是指向const StructType
的(可能是第一个)const指针的指针。因此a
的可能有效参数可以构造如下:
struct StructType const orig[3] = { {} ,{} , {} };
struct StructType const * a[] = {
orig, orig + 1, orig + 2
};
PerformFusionCycle(a, /* Other arguments */);