本文将分享在if语句中初始化的变量的范围是什么?的详细内容,并且还将对在if语句中初始化的变量的范围是什么进行详尽解释,此外,我们还将为大家带来关于android–在kotlin中初始化类变量的正确位
本文将分享在 if 语句中初始化的变量的范围是什么?的详细内容,并且还将对在 if 语句中初始化的变量的范围是什么进行详尽解释,此外,我们还将为大家带来关于android – 在kotlin中初始化类变量的正确位置是什么、c – 在类构造函数中声明的变量范围是什么?、c – 扩展在if / else序列中初始化的变量的范围、c – 类静态变量初始化的规则是什么?的相关知识,希望对你有所帮助。
本文目录一览:- 在 if 语句中初始化的变量的范围是什么?(在 if 语句中初始化的变量的范围是什么)
- android – 在kotlin中初始化类变量的正确位置是什么
- c – 在类构造函数中声明的变量范围是什么?
- c – 扩展在if / else序列中初始化的变量的范围
- c – 类静态变量初始化的规则是什么?
在 if 语句中初始化的变量的范围是什么?(在 if 语句中初始化的变量的范围是什么)
我是 Python 新手,所以这可能是一个简单的范围界定问题。Python文件(模块)中的以下代码让我有些困惑:
if __name__ == ''__main__'': x = 1print x
在我使用过的其他语言中,此代码会引发异常,因为x
变量是if
语句的本地变量,不应存在于它之外。但是这段代码执行,并打印出
1。谁能解释这种行为?模块中创建的所有变量是否对整个模块都是全局的/可用的?
答案1
小编典典Python 变量的作用域是分配它们的最里面的函数、类或模块。if
像和块这样的控制块while
不算在内,因此在 an
内分配的变量if
仍然作用于函数、类或模块。
(由生成器表达式或 list/set/dict 理解定义的隐式函数 确实 很重要,lambda
表达式也是如此。您不能将赋值语句填充到其中的任何一个中,但 lambda 参数和for
子句目标是隐式赋值。)
android – 在kotlin中初始化类变量的正确位置是什么
答:初始化init块中的类变量
private class ViewHolder(view: View) {
val menuImg: ImageView
val txtMenu: TextView
init {
menuImg = view.find(R.id.menuImg)
txtMenu = view.find(R.id.txtMenu)
}
}
B:在类块中直接初始化类变量
private class ViewHolder(view: View) {
val menuImg: ImageView = view.find(R.id.menuImg)
val txtMenu: TextView = view.find(R.id.txtMenu)
}
两个代码之间有什么不同?为什么?
解决方法:
这些选项A和B的执行没有区别:
属性初始值设定项(立即分配值)和初始化程序块(使用init块).但是对于像代码这样的简单初始化,通常在您的情况下使用Property初始化程序 – 选项B.
但是如果在代码中使用这两个版本,请注意初始化程序的执行顺序.
引自this article:
First, default constructor arguments are evaluated, starting with
argument to the constructor you call directly, followed by arguments
to any delegated constructors. Next, initializers (property
initializers and init blocks) are executed in the order that they are
defined in the class, top-to-bottom. Finally, constructors are
executed, starting with the primary constructor and moving outward
through delegated constructors until the constructor that you called
is executed.
c – 在类构造函数中声明的变量范围是什么?
例如,如果构造函数需要迭代int i,那么在构造函数完成后是否会销毁此变量,或者它是否为程序的全局变量?
解决方法
c – 扩展在if / else序列中初始化的变量的范围
这是代码中的样子:
if (my_boolean){ MyClass my_object(arg1); //calling a first constructor } else { MyClass my_object(arg1,arg2); //calling another constructor } //more code using my_object
到目前为止,我尝试使用static关键字但没有成功.是否存在有条件地使用不同构造函数而不必重新定义构造函数的常用方法?
解决方法
MyClass my_object = my_boolean ? MyClass(arg1) : MyClass(arg1,arg2);
考虑到即使该类没有默认构造函数,此代码也能正常工作.
这是一个示范性的例子
#include <iostream> #include <cstdlib> #include <ctime> int main () { struct Point { Point( int x ) : x( x ) {} Point( int x,int y ) : x( x ),y( y ) {} int x = 0; int y = 0; }; std::srand( ( unsigned )std::time( 0 ) ); Point p = std::rand() % 2 ? Point( 1 ) : Point( 1,2 ); std::cout << "p.x = " << p.x << ",p.y = " << p.y << std::endl; return 0; }
我得到了以下输出
p.x = 1,p.y = 2
你得到了什么输出?
总结
以上是小编为你收集整理的c – 扩展在if / else序列中初始化的变量的范围全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
c – 类静态变量初始化的规则是什么?
#include <iostream> using namespace std; struct Test { test() {cout << "Test::test()" << "\n";} void dummy(){} }; template<typename T> struct Message { Message() { test.dummy(); // this call have to be here in order to initialize Test,but why? } static Test test; }; template<typename T> Test Message<T>::test; struct A : public Message<A> { //A(){} // uncomment this (and comment the default one) to call the Test constructor A() = default; }; int main() { }
这就是发生的事情:
>程序本身是空的,即没有创建实例.
> A类有一个CRTP,这似乎对这个例子至关重要.
> A的基数有一个静态声明,我期待它的构造函数被调用.
>对函数进行虚拟调用,什么都不做,但也很关键.
问题是如果我不提供自定义构造函数,那么静态构造函数永远不会被调用.我无法理解为什么需要这个?与默认或编译器生成的有什么区别?为什么我需要调用虚函数?
我相信这是有规则的.我用不同版本的gcc和clang检查了它 – 行为是一样的.我非常感谢标准/文档的链接.
解决方法
12.1 Constructors [class.ctor]
7
A default constructor that is defaulted and not defined as deleted is implicitly defined when it is odr-used (3.2) to create an object of its class type (1.8) or when it is explicitly defaulted after its first declaration.
struct A : public Message<A> { A() = default; // no constructor is emitted unless A is instantiated A(); // declaration }; A::A() = default; // explicit default deFinition int main() { A a; // instantiation A::test; // just explicitly access test so it is initialized regardless of A constructor }
关于在 if 语句中初始化的变量的范围是什么?和在 if 语句中初始化的变量的范围是什么的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – 在kotlin中初始化类变量的正确位置是什么、c – 在类构造函数中声明的变量范围是什么?、c – 扩展在if / else序列中初始化的变量的范围、c – 类静态变量初始化的规则是什么?的相关知识,请在本站寻找。
本文标签: