Tag: 声明

逗号在C ++中的可变参数函数声明中省略

我习惯于像这样声明可变参数的函数: int f(int n, …); 在阅读C ++编程语言时,我发现书中的声明省略了逗号: int f(int n…); // the comma has been omitted 看起来这个语法是特定于C ++的,当我尝试使用C编译器进行编译时出现此错误: test.c:1:12: error: expected ';', ',' or ')' before '…' token int f(int n…); 写入int f(int n, …)和int f(int n… )是否有区别? 为什么这个语法添加了C ++?

在C ++中声明/定义类范围常量的地方?

我很好奇C ++中不同的常量声明和定义选项的好处/坏处。 最长的时间,我只是在类定义之前在头文件的顶部声明它们: //.h const int MyConst = 10; const string MyStrConst = "String"; class MyClass { … }; 虽然这污染了全局命名空间(我知道这是一件坏事,但是从来没有发现过这个糟糕的原因),常量仍然会被限制到单个的翻译单元,所以不包含这个头文件的文件将无法访问这些常量。 但是,如果其他类定义了一个同名的常量,那么可以得到名称冲突,这可能不是一件坏事,因为它可能是一个可以重构的区域的好迹象。 最近,我决定在类定义本身内部声明类特定的常量会更好: //.h class MyClass { public: static const int MyConst = 10; … private: static const string MyStrConst; … }; //.cpp const string MyClass::MyStrConst = "String"; 常量的可见性将根据常量是仅在类内部使用还是用于其他使用该类的对象而需要进行调整。 这是我现在认为是最好的select,主要是因为你可以保持内部类常量私人的类和任何其他类使用公共常量将有一个更详细的引用常量的来源(例如MyClass: :MYCONST)。 它也不会污染全局名字空间。 虽然它不利于在cpp文件中要求非整数初始化。 我也考虑过把常量放到它们自己的头文件中,并把它们包装到名字空间中,以防其他类需要常量,而不是整个类的定义。 只是寻找意见和其他可能的select,我还没有考虑。

NSAssert与assert:你使用哪个,什么时候?

最近我读了两篇非常有意思的build议: 在对这个StackOverflow答案的评论中,@Mike Weller说要把你的断言放在生产代码中…真的是什么性能打击? 有什么理由不让他们进来吗? 在文森特·盖博的博客中 ,他表示你应该更喜欢assert NSAssert …是否有任何理由不使用assert ? (这是更less的信件:))

在声明处添加键/值到词典

我觉得今天非常容易。 在C#中,它的: Dictionary<String, String> dict = new Dictionary<string, string>() { { "", "" } }; 但在vb中,以下不起作用。 Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) (("","")) 我很确定有一种方法来添加他们声明,但我不知道如何。 是的,我想在声明中添加它们,而不是其他时间。 :)所以希望这是可能的。 感谢大家。 我也试过: Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) ({"",""}) 和… Public dict As Dictionary(Of String, String) = New Dictionary(Of […]

下面的第一个代码片段编译,但第二个没有。 为什么?

下面的代码片段编译( 演示 ): struct A{ int i = 10; }; int main() { struct A{ int i = 20; }; struct A; struct A a; } 但是这不是: struct A{ int i = 10; }; int main() { // struct A{ int i = 20; }; struct A; struct A a; } 我可以看到,答案可能是由标准中的这些段落给出的: [basic.lookup.elab] / 2和[basic.scope.pdecl] […]

新的C ++ 11成员初始化特性是否在声明时使初始化列表过时了?

使用C ++ 11,我们现在可以在头文件声明中初始化类成员: class aClass { private: int mInt{100}; public: aClass(); ~aClass(); }; 所以我有点困惑。 传统上,构造函数中的初始化列表已被用于成员初始化: aClass::aClass() : mInt(100) { … } 新的C ++ 11成员初始化特性是否在声明时使初始化列表过时了? 如果不是的话,那么一个优于另一个呢? 什么情况会使声明初始化有利,或者初始化列表是否有利? 什么时候应该使用另一个?

在C ++中声明

据我所知,C ++中的声明/初始化是带有“基本types”的语句,后面跟着逗号分隔的声明列表。 考虑下面的声明: int i = 0, *const p = &i; // Legal, the so-called base type is 'int'. // i is an int while p is a const pointer to an int. int j = 0, const c = 2; // Error: C++ requires a type specifier for all declarations. // Intention was to […]

JavaScript对象属性可以引用同一个对象的另一个属性吗?

我最近试图创build一个像这样的对象: var carousel = { $slider: $('#carousel1 .slider'), panes: carousel.$slider.children().length }; 我的意图是通过在对象属性中caching$('#carousel1 .slider')的结果来提高jQuery的select器性能,并保持代码的简洁和相对干燥。 但是,这不起作用。 当代码执行时,它试图parsingpanes的值时,抛出一个exception,抱怨carousel是未定义的。 这是有道理的,因为我假定在转让声明完全执行之前carousel没有被完全声明。 不过,我想避免诉诸这个: var carousel = {}; carousel.$slider = $('#carousel1 .slider'); carousel.panes = carousel.$slider.children().length; 这并不是太糟糕,但carousel对象将有更多的属性,依赖于其他属性的值,以便可以很快变得冗长。 我试过使用this ,但无济于事。 我可能没有正确地使用它,或者这可能不是一个有效的方法。 有没有一种方法的对象的属性引用同一个对象的其他属性,而该对象仍在宣布? 基于Matthew Flaschen和casablanca的答案(谢谢,伙计们!),我认为这些是我最终得到的基于每种方法的版本: // Matthew Flaschen var carousel = new (function() { this.$carousel = $('.carousel'); this.$carousel_window = this.$carousel.find('.window'); this.$carousel_slider = this.$carousel.find('.slider'); this.$first_pane = […]

在JavaScript中定义本地函数:使用var还是不行?

当在JavaScript中声明一个本地(内部)函数时,有两个select: 用var关键字声明,赋值给variables: (function() { var innerFunction1 = function() { … }; innerFunction1(); }()); 使用function关键字声明,而不分配给variables: (function() { function innerFunction2() { … }; innerFunction2(); }()); 我可以看到第二个优点:函数可以在调用它的代码之下声明,所以更容易将私有函数与实际执行的代码分开。 哪个更好 , 为什么 ?

声明对象数组

我有一个variables,这是一个数组,我希望数组的每个元素默认作为一个对象。 为了达到这个目的,我可以在我的代码中这样做。 var sample = new Array(); sample[0] = new Object(); sample[1] = new Object(); 这工作正常,但我不想提及任何索引号。 我想我的数组的所有元素是一个对象。 我如何声明或初始化它? var sample = new Array(); sample[] = new Object(); 我试过上面的代码,但它不起作用。 如何初始化一个对象数组而不使用索引号?