即使在经过多次Google搜索之后,我对C语言中的常量表达式有什么不同感到困惑.你能提供一个C的常量表达式的例子吗?
我遇到的问题是SDL表示它不支持OpenGL 3.x上下文.我正在尝试遵循本教程:在SDL(C/SDL)中创建跨平台OpenGL 3.2上下文.我在这种情况下使用GLEW,但我也无法使用gl3.h来处理这个问题.这是我最终得到的代码:
#include <glew.h>
#include <SDL.h>
int Testing::init()
{
if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
DEBUGLINE("Error initializing SDL.");
printSDLError();
system("pause");
return 1; // Error
}
//Request OpenGL 3.2 context.
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
//set double buffer
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
//Create window
window = SDL_CreateWindow("OpenGL 3.2 test",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
600, 400, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
if(window == NULL) return 3; // Error
//Print errors to console if there are any
printSDLError(__LINE__);
//Set up OpenGL context.
glContext = SDL_GL_CreateContext(window);
printSDLError(__LINE__);
if(glContext == NULL) …
Run Code Online (Sandbox Code Playgroud) 我最近开始了一个新项目,第一次看到了如下所示的覆盖使用情况.
public class SomeClass {
public void myMethod() {
XStream xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
// the rest ommitted
Run Code Online (Sandbox Code Playgroud)
基本上,它覆盖了thinkworks xstream api中XStream类的wrapMapper()方法,但没有让SomeClass扩展XStream类.我和Java一起工作了很多年,但这是我第一次看到这样的压倒一切.有人可以解释它的内外情况吗?谢谢.
何时在C++中称为"名称"的"标识符"?我主要读到"名称"一词过于使用而不是"标识符",例如:
struct S { int i };
S thing1;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是thing1
一个名称或IDENTIFER?或者术语"标识符"和"名称"是类似的吗?在C中,在引用对象时是否使用术语"名称"?
如果您知道字符串中的开始和结束位置,从哪里开始并结束搜索.例如 -
string s = StringStringString
|S |t |r |i |n |g |S |t |r |i |n |g |S |t |r |i |n |g
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Run Code Online (Sandbox Code Playgroud)
如何在字符串中找到"tr",指定开始搜索的位置在索引6处,结束搜索的位置是索引9.
我正在尝试设置一个搜索限制,所以它不会超越它.
typedef pair<unsigned char, unsigned char> pair_k;
map<unsigned char, pair_k> mapping;
Run Code Online (Sandbox Code Playgroud)
将以这种方式使用:
mapping[100] = make_pair(10,10);
Run Code Online (Sandbox Code Playgroud)
问题是:
我在下面有这个代码,我在编译时遇到错误:
error: cannot convert 'const char*' to 'std::string*' for argument '1' to 'void sillyFunction(std::string*, int)'
#include <iostream>
#include <string>
using namespace std;
int counter = 0;
void sillyFunction(string * str, int cool=0);
int main(){
sillyFunction("Cool");
sillyFunction("Cooler", 1);
return 0;
}
void sillyFunction(string * str, int cool){
counter++;
if (cool){
for (int i=0; i<counter; i++) cout << *str << endl;
} else {
cout << *str << endl;
}
}
Run Code Online (Sandbox Code Playgroud) 以下编译并打印"string"作为输出.
#include <stdio.h>
struct S { int x; char c[7]; };
struct S bar() {
struct S s = {42, "string"};
return s;
}
int main()
{
printf("%s", bar().c);
}
Run Code Online (Sandbox Code Playgroud)
显然,这似乎引发了一个未定义的行为
C99 6.5.2.2/5如果尝试修改函数调用的结果或在下一个序列点之后访问它,则行为未定义.
我不明白它在哪里说"下一个序列点".这里发生了什么?
以下无法在VC++ 8.0编译器上编译时出错(我还没有在最新的visual studio编译器上尝试过.)
错误C2440:'return':无法从'const char*'转换为'const char(&)[6]'
template <typename T>
inline T const& compare (T const& a, T const& b)
{
return a < b ? b : a;
}
int main()
{
::compare("string1", "string2");
}
Run Code Online (Sandbox Code Playgroud)
在函数模板中,似乎是字符串const char (&)[6]
.
据我所知,当<
应用运算符时,数组应该衰减为指针.那么,这个错误可能是因为可能的错误吗?