c++ - c++中 'char()'和 'char'有什么区别

标签 c++

我在编写 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);
}

最佳答案

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

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

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

关于c++ - c++中 'char()'和 'char'有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34879454/

相关文章:

c# - 自动执行 C++ 库的 C# 包装

c++ - 在 HPC 上部署 C++ (MPI) 时如何避免问题

c++ - 哪个容器使用 map 或 set 或者其他?

C++ 如何从类 cpp 文件创建 .h

c++ - C++ 中何时引入了 'and' 和 'or' 替代标记?

c++ - 重用 Eigen 表达式模板

c++ - 指向单例类实例函数的函数指针

c++ - 单链表插入和删除的时间复杂度

c++ - g++上执行二叉搜索树进入死循环

c++ - 使用 warpPerspective() opencv 生成道路的俯 View