相关疑难解决方法(0)

标准库标签

我使用标记文件来完成代码,并快速,内联查看参数,重载,文件(声明的地方)等.我在哪里可以找到C99,C++ 03和C++ 0x标准库的免费标签?(C89会比什么都好,但我宁愿拥有C99.)

我更喜欢没有瑕疵的标签; 例如,实现使用参数的保留名称,所以我宁愿看到"std :: min(a,b)"而不是"std :: min(_M_a,_M_b)".此问题和其他问题排除了从实际实现中生成.虽然我认为一些后期处理可能会清理它们(特别是标识符问题),但从头开始编写它似乎更容易.

c c++ ctags c++11

18
推荐指数
2
解决办法
1862
查看次数

在C++中可以使用哪些其他有用的强制转换

C++附带了四个内置的强制转换.

  1. static_cast
  2. dynamic_cast
  3. const_cast
  4. reinterpret_cast

不要说皱眉头C (style*)cast.

另外,boost提供了一个lexical_cast,你还有其他有用的演员阵容吗?

c++ casting

14
推荐指数
3
解决办法
2089
查看次数

访问受保护方法的方法指针?

这段代码:

class B {
 protected:
  void Foo(){}
}

class D : public B {
 public:
  void Baz() {
    Foo();
  }
  void Bar() {
    printf("%x\n", &B::Foo);
  }
}
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

t.cpp: In member function 'void D::Bar()':
Line 3: error: 'void B::Foo()' is protected
Run Code Online (Sandbox Code Playgroud)
  • 为什么我可以调用受保护的方法但不能使用其地址?
  • 有没有办法从派生类中标记完全可访问的内容,而不是只能从派生类所述派生类中访问?

顺便说一下:这看起来很相关,但是我正在寻找一个参考指标或类似内容的地方(希望这将导致如何按照我期望的方式工作).

c++ specifications protected

13
推荐指数
2
解决办法
5710
查看次数

Greasemonkey的隐藏功能

人们在他们的Greasemonkey脚本中使用了哪些鲜为人知但有用的功能和技术?

(请注意,每个答案只有一个功能.)

类似主题:

javascript greasemonkey

12
推荐指数
5
解决办法
3659
查看次数

从C++中的测试代码访问受保护的成员函数

我一直在努力思考从C++中的一些测试代码访问受保护成员函数的最佳方法,这是我的问题:

//in Foo.h 
Class Foo
{
protected:
    void DoSomething(Data data);
}

//in Blah.h
Class Blah
{
public:
    Foo foo;
    Data data; 
};

//in test code...
Blah blah;
blah.foo.DoSomething(blah.data); // Here's my problem!
Run Code Online (Sandbox Code Playgroud)

到目前为止一些可能的解

  • 使测试代码类成为Foo的朋友,但这会使测试代码污染Foo
  • 使DoSomething成为公共功能
  • 我已经看过为这个帖子建议为Foo创建一个测试包装器,但是这不会起作用,因为Blah包含了Foo的实例.

    欢迎所有建议/见解/意见!

    谢谢

  • c++ testing protected

    11
    推荐指数
    3
    解决办法
    8492
    查看次数

    为什么在C和C++代码中插入URL有效?

    为什么以下代码编译?该语言的哪个部分允许在C和C++代码中添加URL?

    int main()
    {
         http://www.stackoverflow.com
         return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    提前谢谢,卡斯特罗.

    c c++ url

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

    带引用和静态类成员的奇怪案例

    采取以下代码:

    #include <type_traits>
    #include <iostream>
    
    template <class T>
    void print(T &&t){
        std::cout << t << std::endl;
    }
    
    template<class T, T val>
    struct Foo{
        static constexpr T value = val;
    };
    
    int main(){
        print(Foo<int, 123>::value);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    它拒绝在Clang 3.3和GCC 4.8.1下编译("undefined reference to Foo<int, 123>::value"),这让我感到困惑,因为Foo它完全相同std::integral_constant,并且相同的代码运行良好integral_constant.它也在打印功能中使用普通左值引用失败.有关此行为的任何解释?

    这个极小的例子也出现了这个问题:

    template<class T>
    struct Bar{
        static const bool value = true;
    };
    
    Run Code Online (Sandbox Code Playgroud)

    c++ template-meta-programming

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

    在C++中,通过引用扩展范围是否安全?

    在C++中,通过引用扩展范围是否安全?

    在代码中,我的意思是:

    MyCLass& function badIdea()
    {
        MyClass obj1;
        ...
        return obj1;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    c++ scope reference

    9
    推荐指数
    2
    解决办法
    4501
    查看次数

    显式类型转换和多个简单类型说明符

    要初始化类型的对象T,可以执行以下某项操作:

    T x = T();
    T x((T()));
    
    Run Code Online (Sandbox Code Playgroud)

    我的问题涉及由简单类型说明符组合指定的类型,例如unsigned int:

    unsigned int x = unsigned int();
    unsigned int x((unsigned int()));
    
    Run Code Online (Sandbox Code Playgroud)

    Visual C++ 2008和英特尔C++编译器11.1接受这两个没有警告; Comeau 4.3.10.1b2和g ++ 3.4.5(不可否认,并非特别近期)没有.

    根据C++标准(C++ 03 5.2.3/2,expr.type.conv):

    表达式T(),其中T是非数组完整对象类型的简单类型说明符(7.1.5.2)或(可能是cv限定的)void类型,创建指定类型的rvalue,它是值初始化的

    7.1.5.2说,"简单类型说明符是",并跟随一个包含unsigned和的列表int.

    因此,鉴于在5.2.3/2中,"simple-type-specifier"是单数,unsigned并且int是两个类型说明符,上面的例子是否使用unsigned int无效?(如果是这样,后续是,微软和英特尔是否支持所述表达式?)

    这个问题更多是出于好奇而不是其他任何问题; 对于由多个简单类型说明符组合指定的所有类型,值初始化等效于零初始化.(这个问题是由回答关于初始化问题的答案评论提示的).

    c++ value-initialization

    8
    推荐指数
    1
    解决办法
    1800
    查看次数

    c ++三元运算符

    所以我遇到了一些有趣的东西,我没有意识到三元运算符(至少在Visual C++ 98-2010中).正如在http://msdn.microsoft.com/en-us/library/e4213hs1(VS.71).aspx中指出的那样,如果表达式和条件表达式都是l值,则结果是l值.

    当然通常在c/c ++中你会写一些类似的东西:

    int value = (x == 1) ? 1 : 0;

    甚至从不关心r值/ l值的影响,在这种情况下,1和0都不能转换为l值.

    但是,请采取以下措施:

    int value = (x == 1) ? y : z;

    y和z都是l值,它们,或者更准确地说,其中一个是三元运算符的实际结果(不是它的存储值),这不一定是显而易见的(至少我从来没有考虑过任何长度) ).

    但是,这导致了编写以下内容的能力

    (x == 1 ? y : z) = 99;

    如果x = = 1,则将99分配给y,如果x!= 1,则将99分配给z

    我从未见过在任何地方和我所读过的关于使用(或通常是否使用)三元运算符的所有讨论中所描述的内容.

    当然,只有表达式和条件表达式都是l值时,它才有效

    (x == 1 ? 0 : z) = 99;

    无法编译,因为0是编译器愉快地指出的r值.

    这只适用于包括括号的情况

    x == 1 ? y : z = 99;

    是完全不同的东西,只有当(x!= 1)并且美丽的部分是双方仍然是l值时才分配99到z所以有类似的东西(x == 1 ? y : z = 99) …

    c++ conditional-operator visual-c++

    8
    推荐指数
    1
    解决办法
    2400
    查看次数