- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C++ 中的括号用在很多地方:例如在函数调用和分组表达式中覆盖运算符优先级。 除了非法的额外括号 (例如围绕函数调用参数列表),C++ 的一般但不是绝对的规则是 额外的括号永远不会伤害 :
5.1 主要表达式 [expr.prim]
5.1.1 一般 [expr.prim.general]
6 A parenthesized expression is a primary expression whose type and value are identical to those of the enclosed expression. The presence of parentheses does not affect whether the expression is an lvalue. The parenthesized expression can be used in exactly the same contexts as those where the enclosed expression can be used, and with the same meaning, except as otherwise indicated.
&qualified-id
没有括号超出范围,因为它
restricts syntax而不是允许具有不同含义的两种语法。同样,使用
预处理器宏定义中的括号 还可以防止不必要的运算符优先级。
最佳答案
TL; 博士
在以下上下文中,额外的括号会改变 C++ 程序的含义:
decltype
中推断引用性表达式 post-fix expression
形式
(expression)
是
primary expression
,但不是
id-expression
,因此不是
unqualified-id
.这意味着在形式为
(fun)(arg)
的函数调用中阻止了依赖于参数的名称查找。与传统形式相比
fun(arg)
.
1 When the postfix-expression in a function call (5.2.2) is an unqualified-id, other namespaces not considered during the usual unqualified lookup (3.4.1) may be searched, and in those namespaces, namespace-scope friend function or function template declarations (11.3) not otherwise visible may be found. These modifications to the search depend on the types of the arguments (and for template template arguments, the namespace of the template argument). [ Example:
namespace N {
struct S { };
void f(S);
}
void g() {
N::S s;
f(s); // OK: calls N::f
(f)(s); // error: N::f not considered; parentheses
// prevent argument-dependent lookup
}
—end example ]
a, (b, c), d
与常规形式
a, b, c, d
相比,在这种情况下可以启用逗号运算符其中逗号运算符不适用。
2 In contexts where comma is given a special meaning, [ Example: in lists of arguments to functions (5.2.2) and lists of initializers (8.5) —end example ] the comma operator as described in Clause 5 can appear only in parentheses. [ Example:
f(a, (t=3, t+2), c);
has three arguments, the second of which has the value 5. —end example ]
1 There is an ambiguity in the grammar involving expression-statements and declarations: An expression-statement with a function-style explicit type conversion (5.2.3) as its leftmost subexpression can be indistinguishable from a declaration where the first declarator starts with a (. In those cases the statement is a declaration.
1 The ambiguity arising from the similarity between a function-style cast and a declaration mentioned in 6.8 can also occur in the context of a declaration. In that context, the choice is between a function declaration with a redundant set of parentheses around a parameter name and an object declaration with a function-style cast as the initializer. Just as for the ambiguities mentioned in 6.8, the resolution is to consider any construct that could possibly be a declaration a declaration. [ Note: A declaration can be explicitly disambiguated by a nonfunction-style cast, by an = to indicate initialization or by removing the redundant parentheses around the parameter name. —end note ] [ Example:
struct S {
S(int);
};
void foo(double a) {
S w(int(a)); // function declaration
S x(int()); // function declaration
S y((int)a); // object declaration
S z = int(a); // object declaration
}
—end example ]
ifstream dataFile("ints.dat");
list<int> data(istream_iterator<int>(dataFile), // warning! this doesn't do
istream_iterator<int>()); // what you think it does
data
,其返回类型为
list<int>
.该
dataFile
.它的类型是 istream_iterator<int>
.该dataFile
是多余的,被忽略。 istream_iterator<int>
. list<int> data((istream_iterator<int>(dataFile)), // note new parens
istream_iterator<int>()); // around first argument
// to list's constructor
decltype
中的引用表达
auto
类型推导,
decltype
允许推断引用(左值和右值引用)。规则区分
decltype(e)
和
decltype((e))
表达式:
4 For an expression
e
, the type denoted bydecltype(e)
is defined as follows:— if
e
is an unparenthesized id-expression or an unparenthesized class member access (5.2.5),decltype(e)
is the type of the entity named bye
. If there is no such entity, or ife
names a set of overloaded functions, the program is ill-formed;— otherwise, if
e
is an xvalue,decltype(e)
isT&&
, whereT
is the type ofe
;— otherwise, if
e
is an lvalue,decltype(e)
isT&
, whereT
is the type ofe
;— otherwise,
decltype(e)
is the type ofe
.The operand of the decltype specifier is an unevaluated operand (Clause 5). [ Example:
const int&& foo();
int i;
struct A { double x; };
const A* a = new A();
decltype(foo()) x1 = 0; // type is const int&&
decltype(i) x2; // type is int
decltype(a->x) x3; // type is double
decltype((a->x)) x4 = x3; // type is const double&
—end example ] [ Note: The rules for determining types involving
decltype(auto)
are specified in 7.1.6.4. —end note ]
decltype(auto)
的规则对于初始化表达式的 RHS 中的额外括号具有类似的含义。这是来自
C++FAQ 的示例和
this related Q&A
decltype(auto) look_up_a_string_1() { auto str = lookup1(); return str; } //A
decltype(auto) look_up_a_string_2() { auto str = lookup1(); return(str); } //B
string
,第二个返回
string &
,它是对局部变量
str
的引用.
#define TIMES(A, B) (A) * (B);
为了避免不需要的运算符优先级(例如在 TIMES(1 + 2, 2 + 1)
中,它产生 9 但会产生 6,而没有括号围绕 (A)
和 (B)
assert((std::is_same<int, int>::value));
否则将无法编译 (min)(a, b)
(同时禁用 ADL 的不良副作用)关于c++ - 除了运算符优先级之外,额外的括号何时会产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24116817/
IntelliJ 有没有办法删除周围的括号、括号、引号等?例如,如果我有: "string" 有没有办法删除匹配的引号并得到这个? string 最佳答案 不是直接的,但以下替换表达式(ctrl+R,
我有一段代码是这样的; var x(10); var i = 3; x(i) = 7 document.write("The stored value is " + x(3) +" 这是我正在阅读的书
括号在sql语句中的作用是什么? 例如,在声明中: 插入 table1 ([columnname1], columnname2) 值 (val1, val2) 另外,如果表名在括号中,它会做什么? 最
为什么在“java”中,当你声明“注释”的“参数”时,必须在参数后面放置“一对括号”,注释在语法上与“接口(interface)”形式“非常不同”,所以为什么这很奇怪语法...我知道这与注释是使用幕后
我正在尝试实现后缀到中缀和中缀到后缀(使用堆栈),一切都很顺利,除了当我从后缀转换时我无法想出如何处理括号的想法。它说我必须使用最少数量的括号。例如: ab+c*da-fb-*+ (a+b)*c+
我有这样的数据: $json_data_array = '[ { "id": 1, "value": "hr@test.com",
我有一个字符串,其中包含数字周围的方括号 []。由于此字符串代表我的 SQL 数据库的列名称,因此我需要删除/替换它们。到目前为止,我通过以下方式进行: if (stringWithBracket.C
这是 index.js 文件的代码快照,它是在新的 phonegap 项目中默认创建的。 var app = { // Application Constructor initiali
您好,先生,我正在通过 url 将数组列表 android 发送到 php,它也成功插入,但是 start[ 和 end ] 这个小括号也插入了,我想删除它 我尝试以下代码.. 请告诉我如何删除括号
我正在尝试将 css 括号括在我的 h2 标题周围(大概 90% 都在那里),但我在解决一些小问题时遇到了麻烦: 1. 右边线的间距有点偏,应该拿过来与支架连接。我该如何调整? 和 2. 通过 bg.
有人能给我一些关于这个问题的提示吗:仅当表达式包含正确闭合的圆括号和大括号并且没有其他字符(甚至空格)时,它才是正确的。例如,() ({} () ({})) 是正确的表达式,而 ({)} 不是正确的表
这怎么让宽度变成 100%? .test { width: (50%;); } 我已经知道如何修复它,使其变为 50%,并且该语句或多或少是多余的,我只想知道为什么会发生这种情况。 编辑:ht
请问python的语法本质上df.head()和df.head有什么区别?我可以解释为前一个是用于调用方法,而后一个只是试图获取DataFrame的属性,即头部?我很困惑为什么有时末尾有括号但有时
我通过C#阅读了一些MSDN文档,发现一段代码可以在字符串构造函数和字符串本身之间使用,就像这样 string[] stringname; 这是什么意思呢? 最佳答案 这只是一个数组声明。这意味着st
是否有人知道在创建 PHP 数组时 [ ] 的含义,以及是否真的需要它。因为从我的角度来看。两种方式都够了 方式一,带括号: $cars[] = array ('expensive' => $BMW,
最近我看到了很多将 SQL 值包含在 {} 中的 PHP/MySQL 问题,例如: SELECT * FROM table WHERE field LIKE '{$value}'; 这是怎么回事?它甚
Pattern pattern = Pattern.compile("([a-zA-Z]+)") Matcher matcher = pattern.matcher("Text"); matcher.
这个问题在这里已经有了答案: Usage of string::c_str on temporary string [duplicate] (2 个答案) 关闭 8 年前。 如果我有一个函数 myf
例如, class BasicTransitionFunction(TransitionFunction[GrammarBasedState]): ... 其中TransitionFunc
这个问题在这里已经有了答案: Is short-circuiting logical operators mandated? And evaluation order? (7 个答案) Safety
我是一名优秀的程序员,十分优秀!