小编jin*_*575的帖子

在C++模板类中,我可以使用相同的名称键入模板参数吗?

如果我有一个模板类:

template<typename Layout>
class LayoutHandler : Handler {
};
Run Code Online (Sandbox Code Playgroud)

我想将参数Layout公开给该类的用户.然后:

template<typename Layout>
class LayoutHandler : Handler {
public:
    typedef Layout Layout; // using the same name
};
Run Code Online (Sandbox Code Playgroud)

VS2012可以编译此代码,并给出预期的结果.(我使用std :: is_same来检查它.)在标准C++ 03或C++ 11中是否允许这样做?

c++ templates typedef

11
推荐指数
1
解决办法
1045
查看次数

什么是C++运算符 - >.(升点操作员)在boost文档中找到了吗?

我正在阅读增强文档,并在http://www.boost.org/doc/libs/1_54_0/doc/html/lambda/le_in_details.html上查看以下内容:

无法重载的运算符

有些运算符根本不能重载(::,.,.*).对于某些运算符,对返回类型的要求会阻止它们重载以创建lambda仿函数.这些运算符是 - >., - >,new,new [],delete,delete []和?:(条件运算符).

那么运营商是->.什么?我尝试了谷歌和http://www.symbolhound.com/,但没有得到任何有用的东西,在N3337搜索得到1 ->个句子结尾的结果,并且Visual Studio 2012将无法编译:

class xT {
    bool operator ->. () {} /* fail */
};

std::string* p;
p->.size(); /* fail */

std::auto_ptr<std::string> a;
a->.size(); /* fail */
Run Code Online (Sandbox Code Playgroud)

我相信,笔者特意写了->.,因为->.也包括在内,但什么是->.,为什么它是在这里?

c++ boost operator-keyword

7
推荐指数
1
解决办法
268
查看次数

在C++中增加一个未初始化的int安全吗?

int func() {
    int a;
    ++a;  // is this safe?
    printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

我知道什么时候我a得到了未定义的行为,但++a在C++标准中是否安全?这会将"另一个"未初始化的值分配给a没有副作用(抛出异常或导致程序崩溃)吗?

c++ initialization

2
推荐指数
1
解决办法
815
查看次数

std::exception::what() 的目的是什么?

我只能想到使用 std::exception::what() 的以下情况:

\n\n
    \n
  1. 用于调试目的。在我的 Visual Studio 中要查看 e.what(),我必须手动将其添加到监视列表中。拥有一个成员 std::string (以便调试器直接在对象检查器中显示它)并且仅将其包含在非 NDEBUG 构建中不是更好吗?至少他们应该在 NDEBUG 构建中禁用what()。
  2. \n
  3. 输出它,例如MessageBox(e.what())cout << e.what()。据我所知,这些消息对许多用户来说毫无用处。例如,当我尝试重命名一个不存在的文件时:

    \n\n
    \n

    boost::filesystem::rename: \xe7\xb3\xbb\xe7\xbb\x9f\xe6\x89\xbe\xe4\xb8\x8d\xe5\x88\xb0\xe6\x8c\x87\xe5\xae\x9a\xe7\x9a\x84\xe6\x96\x87\xe4\xbb\xb6\xe3\x80\x82: "D:\\MyDesktop\\4", "D:\\MyDesktop\\5"

    \n
    \n\n

    (中文意思是“系统找不到指定的文件。”)用户如何解密这些混合的东西?另外,它是一个const char*而不是类似 的东西const platform_char*,在 Windows 中可能存在 unicode 问题。

  4. \n
  5. 从中提取数据,例如std::regex_match(e.what()...)。我认为这是一个糟糕的想法,显示出设计缺陷。
  6. \n
\n\n

那么我应该在哪里使用 std::exception::what() ?是不是没用?

\n

c++ exception

0
推荐指数
1
解决办法
1213
查看次数