C++ 赋值中等号 (=) 和大括号 ({}) 有什么区别?

问题描述 投票:0回答:1

只是想了解

=
{ }

之间的初始化/赋值差异
#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)
c++ variable-assignment assign assignment-operator curly-braces
1个回答
3
投票

很简单,看这三行:

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);

对于最后两者之间的区别,我将建议您参考:列表初始化(使用大括号)的优点是什么?或者也许更好;一本好书。

© www.soinside.com 2019 - 2024. All rights reserved.