只是想了解
=
和 { }
之间的初始化/赋值差异
#include "std_lib_facilities.h"
class Token {
public:
char kind;
double value;
string name;
Token ( char ch ) : kind{ch} { }
Token ( char ch, double val ) : kind {ch}, value {val} { }
Token ( char ch, string n ) : kind {ch}, name {n} { }
};
int main ( void )
{
char ch;
cin >> ch;
// Token = ch; // Fails to compile - see below.
Token {ch};
return 0;
}
以下之间有什么不同含义:
Token {ch};
与 Token = ch;
这个错误是什么意思?
error: expected unqualified-id
ERROR WHEN USING `Token = ch;`.
$ c++ -std=c++11 -o poc_Token_assignments poc_Token_assignments.cpp
poc_Token_assignments.cpp:20:8: error: expected unqualified-id
`Token = ch;`
^
1 error generated.
使用大括号时不会出错 (
Token {ch};
):
$ c++ -std=c++11 -o poc_Token_assignments poc_Token_assignments.cpp
$ (COMPILED PERFECTLY USING THOSE {} CURLY BRACES)
很简单,看这三行:
5; // Creates an int literal which goes away right away
int = 5; // Syntax error: Cannot assign a value to a type
int a = 5; // Correct: Store the value 5 in the variable a
现在输入您的代码:
Token {ch}
与第一行类似。 Token
被创建,然后立即被销毁。
Token = ch
与第二行类似:您不能将值分配给类型。
我认为你想要的是其中之一:
Token t = ch;
Token t{ch};
Token t(ch);
对于最后两者之间的区别,我将建议您参考:列表初始化(使用大括号)的优点是什么?或者也许更好;一本好书。