簡體   English   中英

C ++中'char()'和'char'有什么區別

[英]What is the difference between 'char()' and 'char' in c++

我在編寫boost::spirit::qi規則時偶然發現了這一點。 我寫了一個不正確的規則聲明,並通過添加括號來解決。 我想到不知道為什么會有所不同。

charchar()什么區別?

這是一個最小的示例,顯示了與之相關的地方。

測試AB是等效的。 測試C編譯但未通過測試。 測試D已被注釋掉,無法與以下消息一起編譯: C2440: 'static_cast' : cannot convert from 'skipper_type' to 'char' (使用稍微更復雜的類型,錯誤將是C2664

該測試示例僅用於說明char vs char()的使用在哪些方面有所不同。 我的問題是兩者之間的區別是什么。

#include <iostream>
#include <string>
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>
#include <boost/spirit/include/qi.hpp>

using std::string;
namespace qi = boost::spirit::qi;
using Iterator = std::string::iterator;
using Skipper = qi::space_type;

Skipper skipper = qi::space;

void CHECK_ITERATOR(Iterator p, Iterator end)
{
    if (p != end)
    {
        BOOST_CHECK_MESSAGE(p == end, "Remaining: " << string(p, end));
    }
}

BOOST_AUTO_TEST_CASE(parse_char_type_B)
{
    qi::rule<Iterator, Skipper, char()> rule = qi::char_;

    char expected = 'B';
    char actual = 0;
    string toParse(&expected, (&expected) + 1);
    Iterator it = toParse.begin();
    BOOST_REQUIRE(qi::phrase_parse(it, toParse.end(), rule, skipper, actual));
    CHECK_ITERATOR(it, toParse.end());
    BOOST_CHECK_EQUAL(expected, actual);
}

BOOST_AUTO_TEST_CASE(parse_char_type_C)
{
    qi::rule<Iterator, Skipper, char> rule = qi::char_;

    char expected = 'C';
    char actual = 0;
    string toParse(&expected, (&expected) + 1);
    Iterator it = toParse.begin();
    BOOST_REQUIRE(qi::phrase_parse(it, toParse.end(), rule, skipper, actual));
    CHECK_ITERATOR(it, toParse.end());
    BOOST_CHECK_EQUAL(expected, actual);
}

BOOST_AUTO_TEST_CASE(parse_char_type_D)
{
    //qi::rule<Iterator, char, Skipper> rule = qi::char_;

    char expected = 'D';
    char actual = 0;
    string toParse(&expected, (&expected) + 1);
    Iterator it = toParse.begin();
    //BOOST_REQUIRE(qi::phrase_parse(it, toParse.end(), rule, skipper, actual));
    //CHECK_ITERATOR(it, toParse.end());
    //BOOST_CHECK_EQUAL(expected, actual);
}

char()是不帶參數的函數類型,返回char

char是表示字符的默認類型。

當然,這只是在需要類型的上下文中。 其他上下文是不同的,例如char a = char(); 值初始化a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM