std::array远远优于C阵列.即使我想与遗留代码进行互操作,我也可以使用std::array::data().有什么理由我想要一个老派阵列吗?
我正在研究django中的模型系统是如何工作的,我发现了一些我不理解的东西.
我知道你创建一个空__init__.py文件来指定当前目录是一个包.并且您可以设置一些变量,__init__.py以便导入*正常工作.
但是django添加了一堆来自... import ...语句并定义了一堆类__init__.py.为什么?这不是让事情看起来凌乱吗?是否有需要此代码的原因__init__.py?
我在Java工作.
我通常会设置一些对象:
public class Foo {
private SomeObject someName;
// do stuff
public void someMethod() {
if (this.someName != null) {
// do some stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:someName在这个例子中等于null,as-in我可以reliably for all objects假设null检查未初始化的对象是否准确?
我想从我的控制器类处理阶段事件(即隐藏).所以我要做的就是通过添加一个监听器
((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);
Run Code Online (Sandbox Code Playgroud)
但问题是初始化刚刚开始
Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));
Run Code Online (Sandbox Code Playgroud)
之前
Scene scene = new Scene(root);
stage.setScene(scene);
Run Code Online (Sandbox Code Playgroud)
因此.getScene()返回null.
我自己找到的唯一解决方法是向myPane.sceneProperty()添加一个监听器,当它变为非null时,我得到场景,添加到它的.windowProperty()我的!该死!我最终检索阶段的监听器处理.这一切都以设置所需的听众来举办舞台活动而告终.我认为听众太多了.这是解决我问题的唯一方法吗?
考虑以下代码:
#include <iostream>
using namespace std;
int main()
{
int x, y, i;
cin >> x >> y >> i;
switch(i) {
case 1:
// int r = x + y; -- OK
int r = 1; // Failed to Compile
cout << r;
break;
case 2:
r = x - y;
cout << r;
break;
};
}
Run Code Online (Sandbox Code Playgroud)
G ++抱怨.crosses initialization of 'int r'我的问题是:
crosses initialization?x + y通过编译,但后来失败了?crosses initialization?编辑 …
我在Swift中有一个大数组.我想将所有成员初始化为相同的值(即它可以是零或其他值).什么是最好的方法?
在C++ 11之前,我们只能对整数或枚举类型的静态const成员执行类内初始化.Stroustrup在他的C++ FAQ中讨论了这个问题,给出了以下示例:
class Y {
const int c3 = 7; // error: not static
static int c4 = 7; // error: not const
static const float c5 = 7; // error: not integral
};
Run Code Online (Sandbox Code Playgroud)
以下推理:
那么为什么存在这些不方便的限制呢?类通常在头文件中声明,并且头文件通常包含在许多翻译单元中.但是,为避免复杂的链接器规则,C++要求每个对象都有唯一的定义.如果C++允许将需要作为对象存储在内存中的实体的类内定义,则该规则将被破坏.
但是,C++ 11放宽了这些限制,允许非静态成员的类内初始化(§12.6.2/ 8):
在非委托构造函数中,如果给定的非静态数据成员或基类未由mem-initializer-id指定(包括没有mem-initializer-list的情况,因为构造函数没有ctor-initializer)然后,实体不是抽象类(10.4)的虚基类
- 如果实体是具有大括号或等于初始值的非静态数据成员,则按照8.5中的规定初始化该实体;
- 否则,如果实体是变体成员(9.5),则不执行初始化;
- 否则,实体默认初始化(8.5).
第9.4.2节还允许非const静态成员的类内初始化,如果它们用说明constexpr符标记的话.
那么我们在C++ 03中受到限制的原因究竟发生了什么?我们只是简单地接受"复杂的链接器规则"或者是否有其他改变使得这更容易实现?
我是C++初学者,我正在阅读Bjarne Stroustrup的编程:使用C++的原理和实践.
在3.9.2"不安全转换 "一节中,作者提到了
当初始化程序是整数文字时,编译器可以检查实际值并接受不暗示缩小的值:
Run Code Online (Sandbox Code Playgroud)int char b1 {1000}; // error: narrowing (assuming 8-bit chars)
我对这个宣言感到困惑.它使用两种类型(int和char).我以前从未在Java和Swift中看过这样的声明(我比较熟悉的两种语言).这是拼写错误还是有效的C++语法?
c++ initialization type-conversion narrowing uniform-initialization
如果之前有人问过这个问题,我已经进行过很多搜索,而且当事情不同时,很多答案来自早期的Swift测试版.我似乎无法找到明确的答案.
我想要子类UIViewController并拥有一个自定义初始化程序,以便我可以轻松地在代码中进行设置.我在Swift中遇到这个问题很困难.
我想要一个init()可以用来传递特定的函数,NSURL然后使用视图控制器.在我看来它看起来像init(withImageURL: NSURL).如果我添加该功能,则会要求我添加该init(coder: NSCoder)功能.
我相信这是因为它在超类中用required关键字标记?所以我必须在子类中做到这一点?我添加它:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)
怎么办?我的特殊初始化程序是否被认为是convenience一个?指定的一个?我打电话给超级初始化器吗?来自同一类的初始化器?
如何将我的特殊初始化程序添加到UIViewController子类中?
如何UIViewController在Swift中为子类添加自定义初始值设定项?
我创建了一个UIViewController看起来像这样的子类:
class MyViewController : UIViewController
{
init(leftVC:UIViewController, rightVC:UIViewController, gap:Int)
{
self.leftVC = leftVC;
self.rightVC = rightVC;
self.gap = gap;
super.init();
setupScrollView();
setupViewControllers();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到一个致命的错误:
致命错误:对类'MyApp.MyViewController'使用未实现的初始化程序'init(nibName:bundle :)'
我已经读过,在添加自定义初始化程序时,还必须覆盖,init(coder aDecoder:NSCoder)所以让我们覆盖它init,看看会发生什么:
override init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder);
}
Run Code Online (Sandbox Code Playgroud)
如果我添加这个,Xcode会抱怨self.leftVC is not initialized at super.init call.所以我想这也不是解决方案.所以我想知道如何将自定义初始化器正确地添加到ViewControllerSwift中的子类中(因为在Objective-C中这看起来不是问题)?