定义控制结构中的变量
Defining variables in control structures
根据标准,在控制结构中声明变量与在其他地方声明变量在行为上有什么不同?我似乎找不到任何关于它的提及。
如果我指的不是很清楚,这里有一个例子:
if (std::shared_ptr<Object> obj = objWeakPtr.lock())
如你所见,我在if块中声明并初始化了一个局部变量obj
。
此外,是否有任何技术上的原因,为什么这个语法在代替条件时没有给出任何特殊的行为?例如,添加一组额外的括号会导致编译器错误;这还可以防止变量与其他条件链接在一起。
// Extra brackets, won't compile.
if ((std::shared_ptr<Object> obj = objWeakPtr.lock()))
// If the above were valid, something like this could be desirable.
if ((std::shared_ptr<Object> obj = objWeakPtr.lock()) && obj->someCondition())
根据标准,在控制结构中声明变量与在其他地方声明变量在行为上有什么不同?我似乎找不到任何关于它的提及。
控制结构介绍中的声明与其他地方的声明没有什么不同。这就是为什么你找不到任何差异。
6.4/3确实对此描述了一些特定的语义,但这并不奇怪:
[n3290: 6.4/3]:
由条件声明引入的名称(由类型说明符seq引入,或由条件)从声明点到结束时都在作用域中由条件控制的子语句。如果名字是在子语句的最外层块中重新声明条件时,重新声明名称的声明是错误格式的。[. .]
此外,是否有任何技术上的原因,为什么这个语法在代替条件时没有给出任何特殊的行为?例如,添加一组额外的括号会导致编译器错误;这还可以防止变量与其他条件链接在一起。
if
条件可以包含声明性语句或表达式。任何表达式都不能包含声明性语句,因此它们也不能混合使用。
[n3290: 6.4/1]:
选择语句从几个控制流中选择一个。selection-statement: if ( condition ) statement if ( condition ) statement else statement switch ( condition ) statement condition: expression attribute-specifier-seq[opt] decl-specifier-seq declarator = initializer-clause attribute-specifier-seq[opt] decl-specifier-seq declarator braced-init-list
这些都是语法结果
在条件中声明和初始化变量与在其他地方声明变量的区别在于,变量被用作条件,并且在if条件语句的范围内,但在该条件的范围之外。另外,在if条件中重新声明变量是不合法的。所以
bool x=something();
if(x) {
bool y=x; // legal, x in scope
int x=3; // legal
...
}
while (x=something_else()) // legal, x still in scope
...
但:
if(bool x=something())
bool y=x; // still legal
int x=3; // not legal to redeclare
...
}
while (x=something_else()) // x declared in condition not in scope any more
相关文章:
- 在 c++ 中将变量作为结构构造函数中的引用传递
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- c++ 将函数参数(带有模板变量的结构)转换为函数体内的字符串
- 成员变量的结构化绑定
- 如何初始化具有常量变量的结构数组
- 如何访问结构中的变量,该变量位于结构中的向量中
- Java 中的私有变量和 C++ 结构中的私有变量有什么区别?
- 哪种控制结构所需的时间复杂度更低?
- 我们可以在不使用任何控制结构的情况下从函数中返回基于决策的值
- 为什么我需要将变量指向结构
- C++中的变量和结构
- 如何用python中的变量控制循环的增量
- C++中的流控制结构,如何修改
- 通过自己的条件变量 c++ 控制每个线程
- 堆分配变量的结构成员对齐
- 帮助同时控制结构程序
- Mac OSX的c++中的变量类型结构(oaidl.h)
- 变量定义在 C++ 的控制结构中做什么
- 在控制结构块中定义变量
- 定义控制结构中的变量