【问题标题】:What is the difference between 'char()' and 'char' in c++c ++中'char()'和'char'有什么区别
【发布时间】:2016-01-19 14:32:03
【问题描述】:

我在编写boost::spirit::qi 规则时偶然发现了这一点。我写了一个不正确的规则声明,我通过添加括号来修复它。我突然想到我不知道为什么这会有所作为。

charchar() 有什么区别?

这是一个最小的例子,显示了这在哪里是相关的。

测试AB 是等价的。测试C 编译但未通过测试。 测试D 被注释掉并且不会与消息一起编译:C2440: 'static_cast' : cannot convert from 'skipper_type' to 'char'。 (对于稍微复杂的类型,错误将是C2664

测试示例只是为了说明charchar() 的使用有何不同。我的问题是两者之间的区别是什么。

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    char()是一个没有参数的函数类型,返回一个char

    char 是表示字符的默认类型。

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

    【讨论】:

    • 请注意,根据上下文,char() 也可以是值初始化的char 对象。
    • @Angew Sure,添加了一些说明。
    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 2019-06-10
    • 2014-05-03
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多