我使用标记文件来完成代码,并快速,内联查看参数,重载,文件(声明的地方)等.我在哪里可以找到C99,C++ 03和C++ 0x标准库的免费标签?(C89会比什么都好,但我宁愿拥有C99.)
我更喜欢没有瑕疵的标签; 例如,实现使用参数的保留名称,所以我宁愿看到"std :: min(a,b)"而不是"std :: min(_M_a,_M_b)".此问题和其他问题排除了从实际实现中生成.虽然我认为一些后期处理可能会清理它们(特别是标识符问题),但从头开始编写它似乎更容易.
C++附带了四个内置的强制转换.
static_castdynamic_castconst_castreinterpret_cast不要说皱眉头C (style*)cast.
另外,boost提供了一个lexical_cast,你还有其他有用的演员阵容吗?
这段代码:
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)
顺便说一下:这看起来很相关,但是我正在寻找一个参考指标或类似内容的地方(希望这将导致如何按照我期望的方式工作).
人们在他们的Greasemonkey脚本中使用了哪些鲜为人知但有用的功能和技术?
(请注意,每个答案只有一个功能.)
类似主题:
我一直在努力思考从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)
到目前为止一些可能的解
欢迎所有建议/见解/意见!
谢谢
为什么以下代码编译?该语言的哪个部分允许在C和C++代码中添加URL?
int main()
{
http://www.stackoverflow.com
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢,卡斯特罗.
采取以下代码:
#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++中,通过引用扩展范围是否安全?
在代码中,我的意思是:
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
Run Code Online (Sandbox Code Playgroud) 要初始化类型的对象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无效?(如果是这样,后续是,微软和英特尔是否支持所述表达式?)
这个问题更多是出于好奇而不是其他任何问题; 对于由多个简单类型说明符组合指定的所有类型,值初始化等效于零初始化.(这个问题是由回答关于初始化问题的答案的评论提示的).
所以我遇到了一些有趣的东西,我没有意识到三元运算符(至少在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++ ×9
c ×2
protected ×2
c++11 ×1
casting ×1
ctags ×1
greasemonkey ×1
javascript ×1
reference ×1
scope ×1
testing ×1
url ×1
visual-c++ ×1