int i = f1() * f2():
f1,f2一定会在乘法前被调用,但是谁先就不知道了(-m)/n
和m/(-n)
都等价于-(m/n)
,m%(-n)
等价于m%n
,(-m)%n
等价于-(m%n)
int i = 0;
是初始化,而非赋值ival = jval = 0
cout << *iter++ << endl;
等价于cout << *iter << endl; ++iter;
sizeof
返回size_t
类型for
循环cast-name<type>(expression)
,cast-name
是static_cast
,dynamic_cast
,const_cast
,reinterpret_cast
中的一种static_cast
实现原有C类型的转换(type)expr
::
.
->
[]
()
函数调用 类型构造++
后--
typeid
cast
++
前--
~
!
-
+
*
&
()
类型转换 sizeof
new
delete
noexcept
->*
.*
*
/
%
+ -
<< >>
< <= > >=
== !=
&
位与^
|
&&
||
? :
=
*= /= %= += -= <<= >>= &= |= ^=
throw
,
goto label;
label: do something
for
语句C++11for ( declaration : expression )
expression是一个对象,用于表示一个序列;declaration负责定义一个变量,用于访问序列中的基础元素for (auto &c : s)
throw runtime_error("Wrong");
类型runtime_error
是标准库异常类型的一种,定义在stdexcept
头文件中try{ } catch( ){ } catch( ){ }
while (cin >> item1 >> item2){
try {
//添加失败抛出runtime_error异常
} catch (runtime_error err) {
cout << err.what()
<< "\nTry Again? Enter y or n" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;
}
}
static
局部静态对象实现生命周期贯穿函数调用及之后的时间.obj
Unix.o
对象代码string::size_type find_char(string &s)
后输入find_char("hello")
会报错void print(const int *beg, const int *end)
int (*matrix)[10]
指向10个整数的数组的指针main
处理命令行选项
int main (int argc, char *argv[]) { }
prog -d -o ofile data0
initializer_list
形参
void error_msg(initializer_list<string> il)
varargs
省略符形参
void foo(parm_list, ...);
return
,因最后一句会隐式执行return
string
则意味着返回值被拷贝至调用点get_val(s,0) = 'A'
左边函数返回了char&
return{"functionX",expected,actual};
Record lookup(const Account&)
Record lookup(Phone);
Record lookup(const Phone); // 重复声明
Record lookup(Phone*);
Record lookup(Phone* const); // 重复声明
Record lookup(Account&); // 函数作用于Account的引用
Record lookup(const Account&); // 新函数,作用于常量引用
Record lookup(Account*); // 新函数,作用于指向Account的指针
Record lookup(const Account*); // 新函数,作用于指向常量的指针
const string &shorterString(const string &s1, const string &s2)
{
return s1.size() <= s2.size() ? s1 : s2;
}
string &shorterString(string &s1, string &s2)
{
auto &r = shorterString(const_cast<const string&>(s1),const_cast<const string&>(s2));
return const_cast<string&>(r);
}
string screen(sz ht = 24, sz wid = 80, char bg = ' ')
screen( , , '?')
错误,只能省略尾部实参string screen(sz ht = 24, sz wid = 80, char bg); string screen(sz ht, sz wid, char bg = ' ')
正确,不是重复声明,但只能给没赋值的实参赋值,不能重新赋constexpr
通常放在头文件中using PF = int (*)(int*, int); PF f1(int);
返回指向函数的指针bool lengthCompare(const string & , const string &);
bool (*pf)(const string &, const string &);
pf = lengthCompare;
pf = &lengthCompare; // 取地址符可选
bool b = pf("hello","goodbye"); // 可以不用*